Ejercicio: Trabajar con el sistema de archivos
.NET se puede usar para encontrar y devolver información relativa a archivos y carpetas.
Tailwind Traders tiene muchas tiendas físicas repartidas por todo el mundo. Por la noche, cada tienda crea un archivo denominado sales.json que contiene el total de todas las ventas de ese día. Estos archivos están organizados en carpetas denominadas con el id. de la tienda.
Nota:
En este módulo se usan la CLI (interfaz de la línea de comandos) de .NET y Visual Studio Code para el desarrollo local. Al terminar este módulo, puede aplicar los conceptos que ha aprendido mediante un entorno de desarrollo como Visual Studio (Windows), Visual Studio para Mac (macOS), o bien el desarrollo continuo con Visual Studio Code (Windows, Linux y macOS).
En este módulo se usa el SDK de .NET 8.0. Asegúrese de que tiene instalado .NET 8.0 mediante la ejecución del siguiente comando en el terminal de comandos que prefiera:
dotnet --list-sdks
Aparecerá un resultado similar al del ejemplo siguiente:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Asegúrese de que aparezca una versión que comience en 8
. Si no aparece ninguna o no se encuentra el comando, instale el SDK más reciente de .NET 8.0.
Clonación del proyecto
En este ejercicio, escribe un programa de .NET que busca archivos denominados sales.json en un directorio y sus subdirectorios.
Ya se ha creado automáticamente un proyecto de inicio. Los clonas mediante el terminal integrado en Visual Studio Code.
Abra Visual Studio Code.
En el menú principal, seleccione Ver>Terminal para abrir una ventana de terminal.
(Opcional) En la ventana del terminal, cambie a un directorio al que desea copiar los archivos, como
c:\MyProjects
.En la ventana del terminal, ejecute el siguiente comando para clonar el proyecto de inicio y vaya al proyecto clonado:
git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
Ejecute el comando siguiente para crear un proyecto de consola de .NET:
dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
Ejecute el comando siguiente para abrir el nuevo proyecto de .NET en la misma instancia de Visual Studio Code:
code -a .
Sugerencia
En este momento, Visual Studio Code puede solicitarle que falten los recursos necesarios para compilar y ejecutar el proyecto.
Seleccione el triángulo con el signo de exclamación y después Relaunch terminal (Reiniciar terminal) para agregar los archivos que permiten a Visual Studio Code ejecutar y depurar el proyecto.
En la ventana Explorador, en mslearn-dotnet-files, expanda el almacena carpeta y cada una de las carpetas numeradas dentro.
Búsqueda de los archivos sales.json
Las tareas siguientes crean un programa para buscar todos los archivos sales.json en todas las carpetas del proyecto mslearn-dotnet-files
.
Inclusión del espacio de nombres System.IO
En la ventana Explorador, seleccione el archivo
Program.cs
para abrirlo en el editor.Pegue el código siguiente en la primera línea del archivo
Program.cs
para importar los espacios de nombresSystem.IO
ySystem.Collections.Generic
:using System.IO; using System.Collections.Generic;
Nota:
A partir de .NET 6, las dos instrucciones del código anterior se incluyen automáticamente en un nuevo proyecto mediante el grupo de propiedades ImplcitUsings
. Como se ha especificado la marca -f net8.0
al crear un proyecto de consola, se agregan implícitamente. Pero si trabaja con un proyecto anterior, se deben incluir en el archivo Program.cs
y no afecta a este proyecto si las deja en el archivo.
Escritura de una función para buscar los archivos sales.json
Cree una función denominada FindFiles
que tome un parámetro folderName
.
Reemplace la línea Console.WriteLine("Hello, World!"); por el código siguiente:
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; }
Inserte el código siguiente debajo de las instrucciones
using
para llamar a la funciónFindFiles
. Este código pasa el nombre de la carpeta stores como la ubicación en la que buscar los archivos.var salesFiles = FindFiles("stores"); foreach (var file in salesFiles) { Console.WriteLine(file); }
Presione Ctrl+S (o Cmd+S en macOS) para guardar el archivo
Program.cs
.
Ejecución del programa
Escriba el comando siguiente en la ventana de terminal para ejecutar el programa:
dotnet run
El programa debe mostrar la salida siguiente:
stores/sales.json stores/201/sales.json stores/202/sales.json stores/203/sales.json stores/204/sales.json
Excelente. Ha escrito correctamente un programa de línea de comandos que recorre todas las carpetas del directorio stores
y enumera todos los archivos sales.json que encuentre.
En este ejemplo, la ruta al directorio stores era bastante sencilla y se encontraba dentro del directorio de trabajo del programa. En la unidad siguiente, aprenderá a crear rutas complejas que funcionan en varios sistemas operativos mediante la clase Path
.
¿Se ha bloqueado?
Si ha tenido problemas para ejecutar el programa, este es el código completo del archivo Program.cs
. Reemplace el contenido del archivo 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;
}