Ejercicio: Trabajar con rutas

Completado

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.

  1. En el editor, inserte el código siguiente encima de la primera línea del archivo Program.cs. Este código usa el método Directory.GetCurrentDirectory para obtener la ruta del directorio actual y almacenarla en una nueva variable currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. 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 variable storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Reemplace la cadena stores de la función de llamada FindFiles con la nueva variable storesDirectory:

    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);
    }
    
  4. Presione Ctrl+S (o Cmd+S en macOS) para guardar el archivo.

  5. Ejecute el programa desde la línea de comandos:

    dotnet run
    
  6. 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.

  1. En el bucle foreach que recorre foundFiles, inserte la siguiente línea de código encima de la declaración if para definir una nueva variable extension. En este código se usa el método Path.GetExtension para obtener la extensión de cada archivo.

        var extension = Path.GetExtension(file);
    
  2. 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);
        }
    }
    
  3. Presione Ctrl+S / Cmd+S para guardar el archivo.

  4. 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;
}