Exercício – Trabalhar com o sistema de ficheiros
Pode utilizar o .NET para encontrar e devolver informações sobre ficheiros e pastas.
A Tailwind Traders tem muitas lojas físicas no mundo inteiro. Todas as noites, cada loja cria um arquivo chamado sales.json que contém o total de todas as vendas daquele dia. Esses arquivos são organizados em pastas nomeadas com o ID de armazenamento.
Nota
Este módulo usa a CLI do .NET (interface de linha de comando) e o Visual Studio Code para desenvolvimento local. Depois de concluir este módulo, você pode aplicar os conceitos aprendidos usando um ambiente de desenvolvimento como Visual Studio (Windows) ou Visual Studio para Mac (macOS), ou continuar o desenvolvimento no Visual Studio Code (Windows, Linux, & macOS).
Este módulo usa o SDK do .NET 8.0. Certifique-se de ter o .NET 8.0 instalado executando o seguinte comando no seu terminal de comando preferido:
dotnet --list-sdks
Saída semelhante ao exemplo a seguir aparece:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Certifique-se de que uma versão que começa com 8
está listada. Se nenhum estiver listado ou o comando não for encontrado, instale o SDK do .NET 8.0 mais recente.
Clone o projeto
Neste exercício, você escreve um programa .NET que pesquisa um diretório e seus subdiretórios para arquivos chamados sales.json.
Um projeto inicial já foi criado para você. Você cloná-lo usando o terminal integrado no Visual Studio Code.
Abra o Visual Studio Code.
No menu principal, selecione Exibir>terminal para abrir uma janela do terminal.
(Opcional) Na janela do terminal, mude para um diretório para o qual você deseja copiar os arquivos, como
c:\MyProjects
.Na janela do terminal, execute o seguinte comando para clonar o projeto inicial e vá para o projeto clonado:
git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
Execute o seguinte comando para criar um novo projeto de console .NET:
dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
Execute o seguinte comando para abrir o novo projeto .NET na mesma instância do Visual Studio Code:
code -a .
Gorjeta
Neste ponto, o Visual Studio Code pode perguntar que os ativos necessários para criar e executar o projeto estão faltando.
Selecione o triângulo com o ponto de exclamação e, em seguida, selecione Reiniciar terminal para adicionar os arquivos que permitem que o Visual Studio Code seja executado e depurar o projeto.
Na janela Explorer, em mslearn-dotnet-files, expanda a pasta stores e cada uma das pastas numeradas dentro.
Encontre os ficheiros sales.json
As tarefas a seguir criam um programa para localizar todos os arquivos sales.json em todas as pastas do mslearn-dotnet-files
projeto.
Incluir o espaço de nomes System.IO
Na janela Explorer, selecione o
Program.cs
arquivo para abri-lo no editor.Cole o seguinte código na primeira linha do
Program.cs
arquivo para importar osSystem.IO
namespaces eSystem.Collections.Generic
:using System.IO; using System.Collections.Generic;
Nota
A partir do .NET 6, as duas instruções no código anterior são automaticamente incluídas em um novo projeto por meio do grupo de ImplcitUsings
propriedades. Como especificamos o -f net8.0
sinalizador quando criamos um novo projeto de console, eles são adicionados implicitamente. No entanto, se você estiver trabalhando com um projeto mais antigo, eles precisam ser incluídos no Program.cs
arquivo, e isso não afeta esse projeto se você deixá-los no arquivo.
Escrever uma função para encontrar os ficheiros sales.json
Crie uma nova função designada por FindFiles
que utilize um parâmetro folderName
.
Substitua a linha Console.WriteLine("Hello, World!"); pelo seguinte código:
IEnumerable<string> FindFiles(string folderName) { List<string> salesFiles = new List<string>(); var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories); foreach (var file in foundFiles) { // The file name will contain the full path, so only check the end of it if (file.EndsWith("sales.json")) { salesFiles.Add(file); } } return salesFiles; }
Insira o código a seguir abaixo das
using
instruções para chamar aFindFiles
função. Esse código passa o nome da pasta de lojas como o local para procurar arquivos.var salesFiles = FindFiles("stores"); foreach (var file in salesFiles) { Console.WriteLine(file); }
Pressione Ctrl+S (ou Cmd+S macOS) para salvar o
Program.cs
arquivo.
Execute o programa
Digite o seguinte comando na janela do terminal para executar o programa:
dotnet run
O programa deve mostrar a seguinte saída:
stores/sales.json stores/201/sales.json stores/202/sales.json stores/203/sales.json stores/204/sales.json
Excelente! Você escreveu com êxito um programa de linha de comando que atravessa todas as pastas no stores
diretório e lista todos os arquivos sales.json que foram encontrados.
Neste exemplo, o caminho para o diretório stores era bastante simples, e no diretório de trabalho do programa. Na próxima unidade, você aprenderá a construir estruturas complexas que funcionam em sistemas operacionais usando a Path
classe.
Está com dificuldades?
Se você teve algum problema ao executar o programa, aqui está o código concluído para o Program.cs
arquivo. Substitua o conteúdo do seu Program.cs
ficheiro por este código:
var salesFiles = FindFiles("stores");
foreach (var file in salesFiles)
{
Console.WriteLine(file);
}
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
// The file name will contain the full path, so only check the end of it
if (file.EndsWith("sales.json"))
{
salesFiles.Add(file);
}
}
return salesFiles;
}