Trabalhar com o sistema de ficheiros
O .NET contém tipos internos para trabalhar com o sistema de arquivos que você pode encontrar no System.IO
namespace.
Aqui, você aprende sobre os tipos disponíveis usando System.IO
C# para ler um sistema de arquivos para descobrir arquivos e diretórios.
Cenário
Grandes varejistas geralmente gravam dados em arquivos para que possam ser processados posteriormente em lotes.
A Tailwind Traders pede a cada uma das respetivas lojas que escrevam os seus totais de vendas e que enviem esse ficheiro para uma localização central. Para utilizar esses ficheiros, a empresa precisa de criar um processamento em lotes que possa funcionar com o sistema de ficheiros.
Incluir o espaço de nomes 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 em critérios de pesquisa e get
set
propriedades de arquivos e diretórios. Você também pode usar System.IO
tipos de namespace para ler e gravar fluxos de dados e arquivos de forma síncrona e assíncrona.
Por enquanto, vamos concentrar-nos no que precisa de saber para trabalhar com diretórios ao utilizar a classe Directory
contida no espaço de nomes System.IO
. A classe Directory expõe métodos estáticos para criar, mover e enumerar através de diretórios e subdiretórios.
Listar todos os diretórios
A Directory
classe é frequentemente usada para listar (ou enumerar) diretórios. Por exemplo, a estrutura de arquivos do Tailwind Traders tem uma pasta raiz chamada stores. Nessa pasta estão subpastas organizadas por número de loja, e dentro dessas pastas estão os arquivos de total de vendas e inventário. A estrutura se parece com 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 Directory.EnumerateDirectories
função.
IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");
foreach (var dir in listOfDirectories) {
Console.WriteLine(dir);
}
// Outputs:
// stores/201
// stores/202
Listar ficheiros num diretório específico
Para listar os nomes de todos os ficheiros num diretório, pode utilizar 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 todos os conteúdos num diretório e todos os subdiretórios
As funções Directory.EnumerateDirectories
e Directory.EnumerateFiles
têm uma sobrecarga que aceita um parâmetro para especificar o padrão de pesquisa a que os ficheiros e diretórios têm de corresponder.
Também têm outra sobrecarga que aceita um parâmetro para indicar se deve percorrer de forma recursiva uma pasta especificada ou todas as 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ê usa a Directory
classe para ler dinamicamente o diretório de lojas principais do Tailwind Traders para encontrar todos os arquivos sales.json.