Trabalhar com o sistema de arquivos
O .NET contém tipos internos que funcionam com um sistema de arquivos que pode ser encontrado no namespace System.IO
.
Aqui, você aprenderá sobre os tipos disponíveis em System.IO
utilizando o C# para a leitura de um sistema de arquivos para descobrir arquivos e diretórios.
O cenário
Grandes varejistas geralmente gravam dados em arquivos para que possam ser processados posteriormente em lotes.
Cada loja da Tailwind Traders grava os totais de vendas em um arquivo e envia esse arquivo para uma localização central. Para usar esses arquivos, a empresa precisa criar um processo em lotes que possa funcionar com o sistema de arquivos.
Incluir o namespace System.IO
O namespace System.IO contém tipos internos que permitem interagir com arquivos e diretórios. Por exemplo, você pode recuperar coleções de arquivos e diretórios com base nos critérios de pesquisa e nas propriedades get
e set
para arquivos e diretórios. Também é possível usar os tipos de namespace System.IO
para ler e gravar fluxos de dados e arquivos de modo síncrono e assíncrono.
No momento, vamos nos concentrar apenas no que você precisa saber para trabalhar com diretórios usando a classe Directory
, contida no namespace System.IO
. A classe Directory expõe métodos estáticos para criação, movimentação e enumeração por meio de diretórios e subdiretórios.
Listar todos os diretórios
A classe Directory
é frequentemente utilizada para listar (ou enumerar) diretórios. Por exemplo, a estrutura de arquivos da Tailwind Traders tem uma pasta raiz chamada stores. Nessa pasta, há subpastas organizadas por número de loja e dentro dessas pastas estão o total de vendas e os arquivos de inventário. A estrutura é semelhante a este exemplo:
📂 stores
📄 sales.json
📄 totals.txt
📂 201
📄 sales.json
📄 salestotals.json
📄 inventory.txt
📂 202
Para ler e listar os nomes dos diretórios de nível superior, use a função Directory.EnumerateDirectories
.
IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");
foreach (var dir in listOfDirectories) {
Console.WriteLine(dir);
}
// Outputs:
// stores/201
// stores/202
Listar arquivos em um diretório específico
Para listar os nomes de todos os arquivos em um diretório, você pode usar a função Directory.EnumerateFiles
.
IEnumerable<string> files = Directory.EnumerateFiles("stores");
foreach (var file in files)
{
Console.WriteLine(file);
}
// Outputs:
// stores/totals.txt
// stores/sales.json
Listar todo o conteúdo de um diretório e todos os subdiretórios
Ambas as funções Directory.EnumerateDirectories
e Directory.EnumerateFiles
têm uma sobrecarga que aceita um parâmetro para especificar um padrão de pesquisa a que os arquivos e diretórios devem corresponder.
Elas também têm outra sobrecarga que aceita um parâmetro para indicar se é preciso percorrer recursivamente uma pasta especificada e todas as suas subpastas.
// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);
foreach (var file in allFilesInAllFolders)
{
Console.WriteLine(file);
}
// Outputs:
// stores/totals.txt
// stores/201/inventory.txt
No próximo exercício, você deve usar a classe Directory
para ler dinamicamente o diretório principal stores da Tailwind Traders e encontrar todos os arquivos sales.json.