CodeGym /Cursos /C# SELF /Conceito de arquivo, sistema de arquivos e caminho

Conceito de arquivo, sistema de arquivos e caminho

C# SELF
Nível 35, Lição 0
Disponível

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.

2
Tarefa
C# SELF, nível 35, lição 0
Bloqueado
Obtendo informações sobre um arquivo
Obtendo informações sobre um arquivo
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION