Exercício – trabalhar com o sistema de arquivos
Você pode usar o .NET para localizar e retornar informações sobre arquivos e pastas.
A Tailwind Traders tem muitas lojas físicas em todo o mundo. Todas as noites, cada loja cria um arquivo chamado sales.json que contém o total de todas as vendas efetuadas nesse dia. Esses arquivos são organizados em pastas nomeadas com a ID da loja.
Observação
Este módulo usa a CLI (interface de linha de comando) do .NET e o Visual Studio Code para desenvolvimento local. Após concluir este módulo, você poderá aplicar os conceitos aprendidos usando um ambiente de desenvolvimento, como o Visual Studio (Windows) ou o Visual Studio para Mac (macOS) ou continuar o desenvolvimento no Visual Studio Code (Windows, Linux e macOS).
Este módulo usa o SDK do .NET 8.0. Verifique se você tem o .NET 8.0 instalado executando o seguinte comando em seu terminal de comando preferencial:
dotnet --list-sdks
Uma saída semelhante ao seguinte exemplo 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]
Verifique se 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.
Clonar o projeto
Nesse exercício, você vai escrever um programa do .NET que pesquisa arquivos chamados sales.json em um diretório e nos respectivos subdiretórios.
Um projeto inicial já foi criado para você. Você irá cloná-lo usando um terminal integrado no Visual Studio Code.
Abra o Visual Studio Code.
No menu principal, clique em Exibir>Terminal para abrir uma janela do terminal.
Na janela do terminal, altere para um diretório para o qual você deseja copiar os arquivos, como
c:\MyProjects
(opcional).Na janela do terminal, execute o seguinte comando para clonar o projeto inicial e acessar o projeto clonado:
git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
Execute o seguinte comando para criar um projeto de console do .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 .
Dica
Neste momento, o Visual Studio Code poderá exibir uma mensagem informando que os ativos necessários para criar e executar o projeto estão ausentes.
Clique no triângulo com um ponto de exclamação, depois em Reiniciar terminal para adicionar os arquivos que o Visual Studio Code usa para executar e depurar o projeto.
Na janela do Explorer, em mslearn-dotnet-files, expanda a pasta lojas e todas as pastas numeradas dentro dela.
Localizar os arquivos sales.json
As tarefas a seguir criam um programa para localizar todos os arquivos sales.json em todas as pastas do projeto mslearn-dotnet-files
.
Incluir o namespace System.IO
Na janela do Explorer, selecione o arquivo
Program.cs
para abri-lo no editor.Cole o seguinte código na primeira linha do arquivo
Program.cs
para importar os namespacesSystem.IO
eSystem.Collections.Generic
:using System.IO; using System.Collections.Generic;
Observação
Do .NET 6 em diante, as duas instruções do código acima são incluídas automaticamente em um novo projeto por meio do grupo de propriedades ImplcitUsings
. Como especificamos o sinalizador -f net8.0
quando criamos um projeto de console, elas são adicionadas implicitamente. No entanto, se você estiver trabalhando com um projeto mais antigo, ele precisará ser incluído no arquivo Program.cs
e não afetará o projeto se for deixado no arquivo.
Escrever uma função para localizar os arquivos sales.json
Crie uma função chamada FindFiles
que usa 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 instruções
using
para executar uma chamada à funçãoFindFiles
. Esse código passa o nome da pasta lojas como o local para pesquisar arquivos.var salesFiles = FindFiles("stores"); foreach (var file in salesFiles) { Console.WriteLine(file); }
Pressione Ctrl+S (ou Cmd+S macOS) para salvar o arquivo
Program.cs
.
Execute o programa
Insira o seguinte comando na janela do terminal para executar o programa:
dotnet run
O programa 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ê gravou com êxito um programa de linha de comando que percorre todas as pastas do diretório stores
e lista todos os arquivos sales.json encontrados.
Neste exemplo, o caminho para o diretório stores era bastante simples e estava no diretório de trabalho do programa. Na próxima unidade, você vai aprender a criar estruturas complexas que funcionam em sistemas operacionais usando a classe Path
.
Ficou preso?
Caso tenha tido problemas ao executar o programa, veja abaixo o código concluído para o arquivo Program.cs
. Substitua o conteúdo do arquivo Program.cs
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;
}