Capítulo 16: Arquivos (Leitura e Escrita) 📝🧟

Neste capítulo, vamos aprender a salvar e ler informações em arquivos de texto externos para que elas não se percam quando o programa for fechado, com o tema The Last of Us! No C++, usamos objetos chamados Streams.


📖 Por que usar Arquivos?

Até agora, todas as variáveis que criamos sumiam da memória assim que o programa terminava. Para salvar o progresso de um jogo ou manter um registro (log) de sobreviventes, precisamos gravar esses dados no disco rígido do computador!

No C++, usamos a biblioteca <fstream> que nos dá o ofstream (para escrever) e o ifstream (para ler).


📖 Exemplo Guiado: Registro de Sobreviventes

Vamos criar um programa que salva o nome de um sobrevivente em um arquivo chamado diario.txt.

  1. Crie o arquivo salvar_sobrevivente.cpp na pasta src/:
#include <iostream>
#include <fstream> // Biblioteca para arquivos
#include <string>
 
using namespace std;
 
int main() {
    // Objeto para escrita em arquivo
    ofstream arquivo;
 
    // Abrindo o arquivo no modo de escrita
    // Se não existir, ele cria. Se existir, ele apaga o conteúdo e recria!
    arquivo.open("diario.txt");
 
    if (!arquivo.is_open()) {
        cout << "Erro ao abrir o arquivo!" << endl;
        return 1;
    }
 
    // Escrevendo no arquivo (funciona igual ao cout!)
    arquivo << "Registro de Sobrevivente" << endl;
    arquivo << "Nome: Joel" << endl;
    arquivo << "Status: Saudavel" << endl;
 
    // REGRA DE OURO: Sempre feche o arquivo!
    arquivo.close();
 
    cout << "Dados salvos no diario.txt com sucesso!" << endl;
 
    return 0;
}

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Compile: g++ salvar_sobrevivente.cpp -o salvar_sobrevivente
  3. Execute: ./salvar_sobrevivente
  4. Um arquivo chamado diario.txt aparecerá na sua pasta! Abra-o para ver o conteúdo.

📊 Ilustração Visual: Fluxo de Escrita

Veja como o C++ envia os dados para o disco:

graph LR
    A["💻 Programa em C++"] -->|1. .open| B[Objeto ofstream]
    B -->|"2. <<"| C["💾 Arquivo: diario.txt"]
    C -->|3. .close| C

🛠️ Prática Obrigatória 1: Modo Append (Anexar)

Por padrão, o ofstream apaga o arquivo se ele já existir. Para apenas ADICIONAR novas linhas no final do arquivo, usamos o modo ios::app. Crie um programa chamado anexar_nota.cpp que use arquivo.open("diario.txt", ios::app) para adicionar a linha “Nota: Cuidado com os estaladores!” no arquivo diario.txt.


🔑 Gabarito de Código

Prática 1: anexar_nota.cpp

#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main() {
    ofstream arquivo;
 
    // Modo append (anexar)
    arquivo.open("diario.txt", ios::app);
 
    if (!arquivo.is_open()) {
        cout << "Erro ao abrir o arquivo!" << endl;
        return 1;
    }
 
    arquivo << "Nota: Cuidado com os estaladores!" << endl;
 
    arquivo.close();
    cout << "Nota adicionada ao diario!" << endl;
 
    return 0;
}

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

(Siga o padrão estabelecido no Guia)


Capitulo Anterior | Proximo Capitulo