Tratamento de ficheiros
A manipulação de ficheiros é uma funcionalidade essencial em C++, permitindo ler, gravar e modificar dados persistentes. Em C++, essa tarefa é realizada principalmente através das classes ifstream (leitura), ofstream (escrita) e fstream (leitura e escrita), todas disponíveis no cabeçalho <fstream>.
1. Inclusão das Bibliotecas Necessárias
#include <iostream>
#include <fstream>
using namespace std;
2. Abrir um Ficheiro
- Leitura:
ifstream ficheiroLeitura("dados.txt"); - Escrita:
ofstream ficheiroEscrita("saida.txt"); - Leitura e Escrita:
fstream ficheiro("dados.txt", ios::in | ios::out);
3. Verificar se o Ficheiro foi Aberto com Sucesso
Sempre verifique se o ficheiro foi aberto corretamente antes de operar sobre ele:
if (!ficheiroLeitura.is_open()) {
cout << "Erro ao abrir o ficheiro para leitura." << endl;
}
Se o ficheiro não existir (no modo leitura), a abertura falha.
4. Leitura de Ficheiros
Linha a linha:
string linha;
while (getline(ficheiroLeitura, linha)) {
cout << linha << endl;
}
Caractere a caractere:
char c;
while (ficheiroLeitura.get(c)) {
cout << c;
}
5. Escrita em Ficheiros
ficheiroEscrita << "Texto a ser gravado no ficheiro." << endl;
6. Fechar o Ficheiro
Após terminar as operações, feche o ficheiro para libertar recursos:
ficheiroLeitura.close();
ficheiroEscrita.close();
7. Exemplo Completo: Copiar Conteúdo de um Ficheiro para Outro
#include <iostream>
#include <fstream>
using namespace std;
void copiarFicheiro(string origem, string destino) {
ifstream ficheiroOrigem(origem);
ofstream ficheiroDestino(destino);
string linha;
if (ficheiroOrigem.is_open() && ficheiroDestino.is_open()) {
while (getline(ficheiroOrigem, linha)) {
ficheiroDestino << linha << "\n";
}
cout << "Cópia concluída." << endl;
} else {
cout << "Erro ao abrir ficheiros." << endl;
}
ficheiroOrigem.close();
ficheiroDestino.close();
}
int main() {
copiarFicheiro("entrada.txt", "saida.txt");
return 0;
}
Neste exemplo, o conteúdo de “entrada.txt” é copiado linha a linha para “saida.txt”.
8. Tratamento de Erros
- Verifique sempre se o ficheiro foi aberto com sucesso.
- Para operações mais seguras, verifique se houve falha na leitura ou escrita usando métodos como
.fail()ou.eof().
if (ficheiroLeitura.fail()) {
cout << "Falha ao ler o ficheiro." << endl;
}
9. Modos de Abertura
ios::in— leituraios::out— escrita (apaga o conteúdo anterior)ios::app— escrita no final do ficheiro (append)ios::binary— modo binário
Exemplo:
ofstream ficheiro("dados.bin", ios::binary | ios::app);
Resumo:
- Use
<fstream>e as classesifstream,ofstreamefstreampara manipular ficheiros em C++. - Verifique sempre a abertura dos ficheiros.
- Feche os ficheiros após o uso.
- Utilize os modos de abertura adequados para cada operação.
