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

Neste capítulo, vamos aprender a salvar e ler informações em arquivos de texto externos no Rust, usando o tema The Last of Us!


📖 Por que usar Arquivos?

Até agora, todos os nossos dados sumiam quando o programa fechava. Para salvar o progresso ou manter um diário de sobrevivência no apocalipse, precisamos gravar os dados no disco!

No Rust, as operações com arquivos retornam um Result, pois abrir ou criar um arquivo pode falhar (por exemplo, se o disco estiver cheio ou o arquivo não existir).


📖 Exemplo Guiado: Registro de Sobreviventes

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

  1. Crie o arquivo salvar_sobrevivente.rs na pasta src/:
use std::fs::File;
use std::io::Write; // Precisamos dessa trait para usar o write!
 
fn main() -> std::io::Result<()> {
    // Tentando criar o arquivo. O '?' no final diz: "Se der erro, retorne o erro imediatamente!"
    let mut arquivo = File::create("diario.txt")?;
 
    // Escrevendo no arquivo
    arquivo.write_all(b"Registro de Sobrevivente\n")?;
    arquivo.write_all(b"Nome: Joel\n")?;
    arquivo.write_all(b"Status: Saudavel\n")?;
 
    println!("Dados salvos no diario.txt com sucesso!");
    
    // Retorna Ok vazio se tudo deu certo
    Ok(())
}

🕹️ Como Executar e Testar no VS Code

  1. Abra le terminal integrado.
  2. Compile: rustc salvar_sobrevivente.rs
  3. Execute: ./salvar_sobrevivente
  4. Abra o arquivo diario.txt que foi criado na mesma pasta!

📊 Ilustração Visual: Fluxo de Escrita

Veja como o Rust trata a segurança na escrita de arquivos:

graph LR
    A[Programa] -->|1. File::create| B{Sucesso?}
    B -->|Sim| C[Escreve os dados]
    B -->|Não| D[Retorna Erro]

🛠️ Prática Obrigatória 1: Lendo o Arquivo

Pesquise como usar std::fs::read_to_string para ler o conteúdo de um arquivo em uma String. Crie um programa chamado ler_diario.rs que leia o arquivo diario.txt criado anteriormente e exiba o conteúdo no terminal!


🔑 Gabarito de Código

Prática 1: ler_diario.rs

use std::fs;
 
fn main() -> std::io::Result<()> {
    // Lê todo o conteúdo do arquivo para uma String
    let conteudo = fs::read_to_string("diario.txt")?;
 
    println!("--- Conteudo do Diario ---");
    println!("{}", conteudo);
 
    Ok(())
}

Capitulo Anterior | Proximo Capitulo