Spec Sistemas Com Cpp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 15.1 — Leitura e Escrita com std::ofstream e std::ifstream

Contexto: Leitura e Escrita com std::ofstream e std::ifstream no contexto de Manipulação de Arquivos, Streams e std::filesystem.

Requisitos de Execução:

  1. Gravar dados em arquivo de log e recuperar linha a linha com std::getline.

Resultado Esperado

Arquivo gravado e lido com streams do C++.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_15_1_SeuNome
  2. Envie na tarefa: Atividade Cap 15 - Manipulação de Arquivos, Streams e std::filesystem
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ofstream out{"app.log"};
    out << "AUDITORIA: Servico C++ operacional\n";
    out.close();

    std::ifstream in{"app.log"};
    std::string linha;
    if (std::getline(in, linha)) {
        std::cout << "Lido do log: " << linha << std::endl;
    }
    return 0;
}

🔍 Nível 2: Prática

Problema 15.2 — Inspeção de Diretórios com std::filesystem::directory_iterator

Contexto: Inspeção de Diretórios com std::filesystem::directory_iterator no contexto de Manipulação de Arquivos, Streams e std::filesystem.

Requisitos de Execução:

  1. Listar todos os arquivos de um diretório inspecionando tamanho e extensão com <filesystem>.

Resultado Esperado

Diretório percorrido e arquivos identificados.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_15_2_SeuNome
  2. Envie na tarefa: Atividade Cap 15 - Manipulação de Arquivos, Streams e std::filesystem
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main() {
    fs::path p{"."};
    std::cout << "Arquivos no diretorio atual:" << std::endl;
    for (const auto& entry : fs::directory_iterator(p)) {
        if (entry.is_regular_file()) {
            std::cout << "  " << entry.path().filename() << " (" << entry.file_size() << " bytes)\n";
        }
    }
    return 0;
}

⚡ Nível 3: Integração

Problema 15.3 — Operações de Sistema de Arquivos (Criar pastas, Copiar e Mover)

Contexto: Operações de Sistema de Arquivos (Criar pastas, Copiar e Mover) no contexto de Manipulação de Arquivos, Streams e std::filesystem.

Requisitos de Execução:

  1. Criar árvore de diretórios com fs::create_directories e verificar permissões.

Resultado Esperado

Diretórios criados de forma segura e multiplataforma.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_15_3_SeuNome
  2. Envie na tarefa: Atividade Cap 15 - Manipulação de Arquivos, Streams e std::filesystem
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main() {
    fs::path dir_auditoria{"build/logs/auditoria"};
    fs::create_directories(dir_auditoria);
    std::cout << "Diretorio criado: " << fs::exists(dir_auditoria) << std::endl;
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 15.4 — Persistência Binária de Objetos Triviais com Streams

Contexto: Persistência Binária de Objetos Triviais com Streams no contexto de Manipulação de Arquivos, Streams e std::filesystem.

Requisitos de Execução:

  1. Gravar struct em binário com out.write(reinterpret_cast<char*>(&dado), sizeof(dado)) e ler com in.read.

Resultado Esperado

Persistência binária direta de structs com alta taxa de transferência I/O.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_15_4_SeuNome
  2. Envie na tarefa: Atividade Cap 15 - Manipulação de Arquivos, Streams e std::filesystem
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <fstream>

struct RegistroBinario { int id; double valor; };

int main() {
    RegistroBinario r_out{101, 7500.50};
    std::ofstream out{"dados.bin", std::ios::binary};
    out.write(reinterpret_cast<const char*>(&r_out), sizeof(r_out));
    out.close();

    RegistroBinario r_in{};
    std::ifstream in{"dados.bin", std::ios::binary};
    in.read(reinterpret_cast<char*>(&r_in), sizeof(r_in));
    std::cout << "Binario lido: ID=" << r_in.id << " | R$ " << r_in.valor << std::endl;
    return 0;
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos