Trabajo con el sistema de archivos

Completado

.NET contiene tipos integrados para trabajar con el sistema de archivos que puede encontrar en el espacio de nombres System.IO.

Aquí obtendrá información sobre los tipos disponibles en System.IO mediante C# para leer el sistema de archivos con el propósito de descubrir archivos y directorios.

El escenario

A menudo, los grandes minoristas escriben datos en archivos para que se puedan procesar posteriormente en lotes.

En Tailwind Traders, cada una de sus tiendas escribe sus totales de ventas en un archivo y ese archivo se envía a una ubicación central. Para usar esos archivos, la compañía debe crear un proceso por lotes que pueda funcionar con el sistema de archivos.

Inclusión del espacio de nombres System.IO

El espacio de nombres System.IO contiene tipos integrados que permiten interactuar con archivos y directorios. Por ejemplo, puede recuperar colecciones de archivos y directorios en función de criterios de búsqueda y las propiedades get y set de archivos y directorios. También puede usar los tipos del espacio de nombres System.IO para leer y escribir archivos y flujos de datos de forma sincrónica y asincrónica.

Por el momento, nos centraremos únicamente en lo que necesita saber para trabajar con directorios mediante la clase Directory contenida en el espacio de nombres System.IO. La clase Directory expone métodos estáticos para crear, mover y enumerar directorios y subdirectorios.

Enumeración de todos los directorios

La clase Directory se usa a menudo para listar (o enumerar) directorios. Por ejemplo, la estructura del archivo de Tailwind Traders tiene una carpeta raíz denominada stores. En esa carpeta hay subcarpetas organizadas por número de tienda, y dentro de esas carpetas se encuentran los archivos de inventario y total de ventas. La estructura es similar a la de este ejemplo:

📂 stores
    📄 sales.json
    📄 totals.txt
    📂 201
       📄 sales.json
       📄 salestotals.json
       📄 inventory.txt
    📂 202

Para leer y enumerar los nombres de los directorios de nivel superior, use la función Directory.EnumerateDirectories.

IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");

foreach (var dir in listOfDirectories) {
    Console.WriteLine(dir);
}

// Outputs:
// stores/201
// stores/202

Enumeración de los archivos de un directorio específico

Para enumerar los nombres de todos los archivos de un directorio, puede usar la función Directory.EnumerateFiles.

IEnumerable<string> files = Directory.EnumerateFiles("stores");

foreach (var file in files)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/sales.json

Enumeración de todo el contenido de un directorio y todos los subdirectorios

Las funciones Directory.EnumerateDirectories y Directory.EnumerateFiles tienen una sobrecarga que acepta un parámetro para especificar un patrón de búsqueda con el que los archivos y directorios deben coincidir.

También tienen otra sobrecarga que acepta un parámetro para indicar si se debe atravesar de forma recursiva una carpeta específica y todas sus subcarpetas.

// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);

foreach (var file in allFilesInAllFolders)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/201/inventory.txt

En el ejercicio siguiente, usará la clase Directory para leer dinámicamente el directorio principal stores de Tailwind Traders con el fin de encontrar todos los archivos sales.json.

Comprobación de conocimientos

1.

¿Cuál de las siguientes tareas se puede realizar con Directory.EnumerateFiles?