1. Introdução
Arquivo — é só um bloco de dados que fica guardado fisicamente em algum dispositivo: HD, SSD, pendrive, ou até disquete (manda um salve pro teu avô!). Pra quem usa, arquivo é algo que dá pra abrir, ler, editar e salvar.
Na programação, arquivo é uma sequência de bytes com um nome e um lugar, e pra ti, como dev, é um objeto que tem nome, caminho (tipo endereço), tamanho, data de criação e por aí vai. O mais importante: arquivo é um armazenamento persistente de dados. Tudo que rola na memória depois que o programa roda normalmente some quando ele fecha, mas o arquivo fica lá.
O que é sistema de arquivos?
Sistema de arquivos — é o jeito de guardar e organizar arquivos no disco. Ele responde perguntas tipo: onde e como achar um arquivo, quem pode acessar, como as pastas (diretórios) são organizadas, como achar o nome e o conteúdo do arquivo.
Imagina um armário gigante cheio de gavetas. Em cada gaveta tem pastas, e em cada pasta — documentos (arquivos). Pra achar teu resumo de C#, tu tem que abrir o armário, achar a gaveta certa, pegar a pasta e dentro dela — o papel que tu quer. É assim que o sistema de arquivos organiza as infos.
Sistemas de arquivos populares
- NTFS — o sistema de arquivos "nativo" do Windows.
- FAT32, exFAT — pra pendrives, cartões SD, HDs externos.
- EXT4 — famoso no Linux.
- APFS, HFS+ — macOS.
Pra quem programa em C#, isso normalmente não faz muita diferença: o .NET esconde esses detalhes e tu trabalha com a ideia de "arquivo/pasta". Mas às vezes é bom saber umas coisas. Por exemplo, no NTFS tu pode usar espaço e vários símbolos especiais no nome do arquivo, mas no FAT32 não rola.
2. Como funcionam diretórios (pastas)
Diretório (ou pasta) — é um tipo especial de arquivo que guarda listas de outros arquivos e/ou diretórios. A árvore de diretórios (hierarquia de arquivos) é aquele caminho clássico da raiz até o arquivo: tipo C:\Users\Ivan\Documents\MyFile.txt.
- Raiz — é o começo do disco (C:\).
- Dentro — pastas (subpastas), onde ficam arquivos ou outras pastas.
Aqui vai uma visualização simples:
C:\
└── Users\
└── Ivan\
├── Documents\
│ └── MyFile.txt
└── Pictures\
└── Cat.jpg
3. O que é caminho de arquivo (file path)?
Caminho de arquivo — é o "endereço" do arquivo na árvore de diretórios. Com ele tu acha qualquer arquivo ou pasta sem erro.
Caminho absoluto e relativo
- Caminho absoluto: começa da raiz do sistema de arquivos.
Windows: C:\Users\Ivan\Documents\MyFile.txt
Linux/macOS: /home/ivan/Documents/MyFile.txt - Caminho relativo: começa do lugar onde tu tá agora (diretório atual).
Por exemplo, se teu programa rodou da pasta C:\Users\Ivan, então o caminho relativo Documents\MyFile.txt vai dar no mesmo arquivo.
Diretório atual — é um conceito especial: é o "ponto de partida" pra todos os caminhos relativos. Quando tu roda o programa, normalmente é a pasta onde tá o .exe ou de onde tu abriu o terminal.
Esquema: Caminho absoluto e relativo
Caminho absoluto Caminho relativo
C:\Projects\MyApp\logs\output.txt logs\output.txt
└─ Raiz do disco (C:) └─ Relativo ao MyApp rodando
Separadores nos caminhos: \ e /
No Windows se usa a barra invertida (\), e no Linux/macOS — normalmente a barra normal (/).
O .NET moderno aceita os dois jeitos, mas tenta não misturar no mesmo projeto. Pra montar caminho, sempre usa o API próprio (interface de programação), não junta as strings na mão.
4. Como o programa enxerga um arquivo
No .NET tem um monte de ferramentas pra lidar com arquivos. As principais são:
- System.IO.File: métodos estáticos pra ler, gravar, deletar, checar se o arquivo existe e tal.
- System.IO.Directory: métodos parecidos pra trabalhar com pastas.
- System.IO.FileInfo e System.IO.DirectoryInfo: wrappers orientados a objeto pra acessar os metadados do arquivo/pasta.
- System.IO.Path: classe helper pra trabalhar com caminhos (juntar caminhos, pegar extensão, nome e etc).
Uns exemplos rapidão
Checando se o arquivo existe
using System.IO;
if (File.Exists("data.txt"))
{
Console.WriteLine("Arquivo encontrado!");
}
else
{
Console.WriteLine("Arquivo não encontrado!");
}
Pegando o tamanho do arquivo
var info = new FileInfo("data.txt");
Console.WriteLine($"Tamanho do arquivo: {info.Length} bytes");
A gente vai ver como tudo isso funciona nas próximas aulas. Por enquanto — só olha e curte :).
5. Dicas úteis
Metadados do arquivo: nome, extensão, tamanho, datas e etc.
Quando tu mexe com arquivo, não é só o conteúdo que importa — tem também o "passaporte do arquivo":
- Nome — como o arquivo aparece pra galera.
- Extensão — .txt, .jpg, .exe, .cs e outros: ajuda (às vezes!) a saber o que tem dentro.
- Tamanho — quantos bytes tem.
- Data de criação/modificação — dá pra saber quando o arquivo apareceu ou foi mudado pela última vez.
- Atributos — tipo: só leitura, oculto, de sistema.
No .NET, as classes FileInfo, DirectoryInfo são bem práticas pra isso (vai ter numa das próximas aulas).
Extensões de arquivo e formatos
Extensão de arquivo — é só a parte do nome depois do ponto. Por exemplo, em document.txt a extensão é txt. O sistema operacional usa a extensão pra saber com o que "abrir" o arquivo (tipo, .jpg — programa de imagem, .xls — Excel, etc).
Mas pra quem programa, extensão é só uma dica. O formato real do arquivo é só pelo conteúdo. Dá até pra abrir MyCat.jpg como texto — e vai aparecer um monte de "caracteres doidos" (uns símbolos nada a ver, não é imagem). Então lembra: extensão não é garantia, é só convenção.
Como funciona ler e gravar arquivo: noções básicas
Arquivo é uma sequência de bytes. Trabalhar com arquivo em C# normalmente é:
- Abrir o arquivo pra ler ou gravar (ou os dois).
- Ler os dados pra memória.
- Gravar dados novos no disco.
- Fechar o arquivo — muito importante, senão tu prende o recurso do sistema (e alguém não consegue deletar o arquivo enquanto tu tá com ele aberto).
Os APIs modernos do .NET cuidam disso pra ti: por exemplo, a classe File abre, lê e já fecha. Mas quando tu mexe com streams (Stream) e arquivos grandes, tem que ficar ligado (vamos falar disso nas próximas aulas).
O que é bom saber sobre multiplataforma
Quase todo C# moderno roda igual no Windows, Linux e macOS. Mas tem uns detalhes. O mais comum é a diferença nos separadores (\ vs /), além de limites de tamanho do nome e símbolos proibidos.
Por isso APIs tipo Path.Combine e métodos do System.IO.Path são teus melhores amigos. Eles "juntam" o caminho certo em qualquer SO. Nunca faz assim:
var filePath = "C:\\Users\\Ivan\\data.txt"; // Só pra Windows!
Melhor assim:
var filePath = Path.Combine("Users", "Ivan", "data.txt");
Como descobrir o diretório de trabalho atual?
Às vezes é importante saber onde teus arquivos vão ser salvos. Pra isso tem uma classe especial:
string currentDir = Environment.CurrentDirectory;
Console.WriteLine($"Diretório atual: {currentDir}");
Aliás, se tu quiser deixar o usuário escolher o caminho, usa diálogos de seleção de arquivo/pasta ou argumentos de linha de comando.
GO TO FULL VERSION