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 — leitura
  • ios::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 classes ifstream, ofstream e fstream para 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.