Trabalhando com o sistema de arquivos em C++: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com o sistema de arquivos em C++: do básico ao avançado



Trabalhar com o sistema de arquivos é uma das tarefas fundamentais no desenvolvimento em C++. Seja para salvar configurações de aplicativos, processar logs ou criar sistemas complexos de gerenciamento de dados — saber ler, escrever e manipular arquivos e diretórios é essencial para todo desenvolvedor C++. Neste artigo, abordaremos tanto os métodos clássicos de trabalho com arquivos através de fstream, quanto a abordagem moderna usando a biblioteca std::filesystem (C++17 e superior).



Fundamentos do trabalho com arquivos: biblioteca fstream



A biblioteca fstream (<fstream>) fornece três classes principais para trabalhar com arquivos:



  • ifstream — para leitura de arquivos (input file stream);
  • ofstream — para escrita em arquivos (output file stream);
  • fstream — para leitura e escrita simultâneas.


Leitura de dados de um arquivo



Vamos considerar um exemplo simples de abertura e leitura de um arquivo de texto linha por linha:



#include <iostream>#include <fstream>#include <string>

int main() { std::ifstream inputFile("data.txt"); if (!inputFile.is_open()) { std::cerr << "Erro ao abrir o arquivo!" << std::endl; return 1; }

std::string line; while (std::getline(inputFile, line)) { std::cout << line << std::endl; }

inputFile.close(); return 0;}


É importante sempre verificar se o arquivo foi aberto com sucesso usando o método is_open(). O arquivo será fechado automaticamente ao sair do escopo, mas chamar explicitamente close() é considerada uma boa prática.



Escrita de dados em um arquivo



A escrita em um arquivo é feita de forma análoga à saída no console — usando o operador <<:



#include <fstream>

int main() { std::ofstream outputFile("output.txt"); if (!outputFile) { std::cerr << "Não foi possível criar o arquivo!" << std::endl; return 1; }

outputFile << "Linha 1" << std::endl; outputFile << "Linha 2" << std::endl; outputFile << 42 << std::endl; // números são escritos automaticamente como texto

outputFile.close(); return 0;}


Por padrão, ofstream sobrescreve o arquivo. Para adicionar dados ao final, use o flag std::ios::app:



std::ofstream outputFile("log.txt", std::ios::app);


Arquivos binários e acesso aleatório



Para trabalhar com dados binários, use o flag std::ios::binary. Os métodos read() e write() permitem trabalhar com blocos de memória:



#include <fstream>

struct Record { int id; char name[50];};

int main() { // Escrita da estrutura Record rec = {1, "Exemplo"}; std::ofstream binOut("data.bin", std::ios::binary); binOut.write(reinterpret_cast<char*>(&rec), sizeof(rec)); binOut.close();

// Leitura da estrutura Record recIn; std::ifstream binIn("data.bin", std::ios::binary); binIn.read(reinterpret_cast<char*>(&recIn), sizeof(recIn)); binIn.close();

return 0;}


Para posicionamento dentro do arquivo, use seekg() (para entrada) e seekp() (para saída) com os parâmetros std::ios::beg, std::ios::cur ou std::ios::end.



C++ moderno: biblioteca std::filesystem



A partir do C++17, o módulo std::filesystem foi incorporado à biblioteca padrão, simplificando significativamente o trabalho com o sistema de arquivos. Ele fornece funções convenientes para manipulação de caminhos, arquivos e diretó

Blogs

Book Recommendations