Trabalho com sistema de arquivos em C++: exemplos práticos

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

Introdução

Trabalhar com sistema de arquivos é uma das tarefas essenciais em qualquer programação aplicada. Em C++, existem duas abordagens principais: a clássica (usando a biblioteca <fstream>) e a moderna (usando a biblioteca <filesystem>, disponível a partir do padrão C++17). Neste artigo, vamos explorar na prática como ler e escrever arquivos, criar e excluir diretórios, além de verificar a existência de arquivos.

O material será útil tanto para iniciantes que estão aprendendo C++ quanto para desenvolvedores experientes que desejam atualizar seus conhecimentos sobre os recursos modernos da linguagem.



1. Leitura e escrita de arquivos de texto com fstream

A biblioteca <fstream> fornece classes para trabalhar com arquivos: ifstream (leitura), ofstream (escrita) e fstream (leitura e escrita).



1.1. Escrevendo dados em um arquivo

Para escrever em um arquivo, usamos um objeto ofstream. Se o arquivo não existir, ele será criado. Se existir, o conteúdo será sobrescrito (por padrão).

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

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

outFile << "Olá, mundo!" << std::endl; outFile << "Esta é a segunda linha." << std::endl; outFile.close(); std::cout << "Dados escritos." << std::endl; return 0;}

Observe: sempre verificamos se o arquivo foi aberto com sucesso e o fechamos após o uso.



1.2. Lendo dados de um arquivo

Para leitura, usamos ifstream. A maneira mais simples é ler linha por linha com std::getline.

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

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

std::string line; while (std::getline(inFile, line)) { std::cout << line << std::endl; } inFile.close(); return 0;}

Este método é conveniente porque lida automaticamente com o final do arquivo e não requer verificações adicionais.



1.3. Modos de abertura de arquivo

Você pode combinar flags para controlar o modo de abertura. Por exemplo, para adicionar dados ao final do arquivo (modo append), use a flag std::ios::app:

std::ofstream outFile("example.txt", std::ios::app);outFile << "Linha adicional." << std::endl;outFile.close();

Outras flags úteis: std::ios::binary (modo binário), std::ios::trunc (limpar o arquivo ao abrir).



2. Trabalho moderno com sistema de arquivos (C++17 e filesystem)

A biblioteca <filesystem> simplifica significativamente as manipulações com arquivos e pastas. Todas as funções estão no namespace std::filesystem.



2.1. Verificando a existência de um arquivo ou diretório

A função exists() retorna true se o objeto existir:

#include <iostream>#include <filesystem>

namespace fs = std::filesystem;

int main() { std::string path = "example.txt"; if (fs::exists(path)) { std::cout << "O arquivo existe." << std::endl; } else { std::cout << "Arquivo não encontrado." << std::endl; } return 0;}


2.2. Criando e excluindo diretórios

Para criar uma pasta, use create_directory(). Para excluir, use remove() ou remove_all() (exclusão recursiva).

Blogs

Book Recommendations