🧩 Exercícios: Manipulação de Arquivos, Streams e std::filesystem
Spec Sistemas Com Cpp • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 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:
- 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)
- Salve o arquivo como:
Atividade_15_1_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_15_2_SeuNome - 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:
- Criar árvore de diretórios com
fs::create_directoriese verificar permissões.
Resultado Esperado
Diretórios criados de forma segura e multiplataforma.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_3_SeuNome - 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:
- Gravar struct em binário com
out.write(reinterpret_cast<char*>(&dado), sizeof(dado))e ler comin.read.
Resultado Esperado
Persistência binária direta de structs com alta taxa de transferência I/O.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_4_SeuNome - 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 |