Ejercicio: Trabajar con rutas
La clase Path
de .NET y Directory.GetCurrentDirectory
son dos maneras de definir y crear rutas de acceso del sistema de archivos.
En el ejercicio anterior, ha escrito un programa que itera en una carpeta para encontrar cualquier archivo sales.json que haya en ella o en cualquier subcarpeta.
En este ejercicio, usa la clase Path
y Directory.GetCurrentDirectory
para mejorar el programa, de forma que encuentre cualquier archivo con la extensión .json.
Uso del directorio actual y combinación de rutas de acceso
En el código de Program.cs actual, se pasa la ubicación estática de la carpeta stores. Ahora, cambiaremos ese código para que use el valor de Directory.GetCurrentDirectory
en lugar de pasar un nombre de carpeta estática.
En el editor, inserte el código siguiente encima de la primera línea del archivo
Program.cs
. Este código usa el métodoDirectory.GetCurrentDirectory
para obtener la ruta del directorio actual y almacenarla en una nueva variablecurrentDirectory
:var currentDirectory = Directory.GetCurrentDirectory();
Inserte el código siguiente después de la línea que acaba de agregar. Este código usa el método
Path.Combine
para crear la ruta de acceso completa al directorio de almacenes y almacenarla en una nueva variablestoresDirectory
:var storesDirectory = Path.Combine(currentDirectory, "stores");
Reemplace la cadena
stores
de la función de llamadaFindFiles
con la nueva variablestoresDirectory
:var salesFiles = FindFiles(storesDirectory);
Ahora la parte superior del archivo debe tener un aspecto similar al siguiente fragmento de código:
var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesFiles = FindFiles(storesDirectory); foreach (var file in salesFiles) { Console.WriteLine(file); }
Presione Ctrl+S (o Cmd+S en macOS) para guardar el archivo.
Ejecute el programa desde la línea de comandos:
dotnet run
El programa debe mostrar la salida siguiente:
/home/username/dotnet-files/stores/sales.json /home/username/dotnet-files/stores/201/sales.json /home/username/dotnet-files/stores/202/sales.json /home/username/dotnet-files/stores/203/sales.json /home/username/dotnet-files/stores/204/sales.json
Observe que los nombres de archivo devueltos incluyen la ruta completa del sistema. Esta ruta se incluye porque el método
Directory.GetCurrentDirectory
devuelve la ruta completa a la ubicación actual.
Búsqueda de todos los archivos .json
En lugar de buscar solo los archivos sales.json, el programa necesita buscar cualquier archivo con una extensión .json. Para ello, puede usar el método Path.GetExtension
a fin de comprobar la extensión de cada archivo.
En el bucle
foreach
que recorrefoundFiles
, inserte la siguiente línea de código encima de la declaraciónif
para definir una nueva variableextension
. En este código se usa el métodoPath.GetExtension
para obtener la extensión de cada archivo.var extension = Path.GetExtension(file);
Cambie la instrucción
if
para que se parezca a la siguiente línea de código. Esta instrucción comprueba si la extensión del archivo es igual a .json.if (extension == ".json")
El bucle
foreach
debe tener un aspecto similar al siguiente código:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }
Presione Ctrl+S / Cmd+S para guardar el archivo.
Ejecute el programa desde la línea de comandos:
dotnet run
Ahora, en la salida se muestran todos los archivos .json que están en todos los directorios de id. de tienda:
/home/username/dotnet-files/stores/sales.json /home/username/dotnet-files/stores/201/sales.json /home/username/dotnet-files/stores/201/salestotals.json /home/username/dotnet-files/stores/202/sales.json /home/username/dotnet-files/stores/202/salestotals.json /home/username/dotnet-files/stores/203/sales.json /home/username/dotnet-files/stores/203/salestotals.json /home/username/dotnet-files/stores/204/sales.json /home/username/dotnet-files/stores/204/salestotals.json
Buen trabajo. Ha usado la clase Path
y el método Directory.GetCurrentDirectory
para que el programa sea mucho más eficaz. En la siguiente unidad, aprenderemos a crear directorios y a mover archivos entre ubicaciones.
¿Se ha bloqueado?
Si se ha bloqueado en algún momento de este ejercicio, aquí tiene el código completo. Quite todo lo que contiene Program.cs y reemplácelo por esta solución:
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesFiles = FindFiles(storesDirectory);
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)
{
var extension = Path.GetExtension(file);
if (extension == ".json")
{
salesFiles.Add(file);
}
}
return salesFiles;
}