diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..6b9ed18 --- /dev/null +++ b/Program.cs @@ -0,0 +1,323 @@ +// Trabajo con el sistema de archivos + +// Inclusión del espacio de nombres System.IO + +// Enumeración de todos los directorios +/* +IEnumerable listaDeDirectorios = Directory.EnumerateDirectories("stores"); + +foreach (var directorio in listaDeDirectorios) { + Console.WriteLine(directorio); +} +*/ + +// Enumeración de los archivos de un directorio específico +/* +IEnumerable archivos = Directory.EnumerateFiles("stores"); + +foreach (var archivo in archivos) +{ + Console.WriteLine(archivo); +} +*/ + +// Enumeración de todo el contenido de un directorio y todos los subdirectorios +/* +// Encuentra todos los archivos *.txt en la carpeta de stores y sus subcarpetas. +IEnumerable todosArchivosEnTodasCarpetas = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories); + +foreach (var archivo in todosArchivosEnTodasCarpetas) +{ + Console.WriteLine(archivo); +} +*/ + + +// Ejercicio: Trabajar con el sistema de archivos +/* +// using System.IO; +// using System.Collections.Generic; + +var archivosVentas = BuscarArchivos("stores"); + +foreach (var archivo in archivosVentas) +{ + Console.WriteLine(archivo); +} + +static IEnumerable BuscarArchivos(string nombreCarpeta) +{ + List archivosVentas = new List(); + + var archivosEncontrados = Directory.EnumerateFiles(nombreCarpeta, "*", SearchOption.AllDirectories); + + foreach (var archivo in archivosEncontrados) + { + // El nombre del archivo contendrá la ruta completa, así que solo verifique el final. + if (archivo.EndsWith("sales.json")) + { + archivosVentas.Add(archivo); + } + } + + return archivosVentas; +} +*/ + + +// Trabajo con rutas de acceso de archivo en .NET + +// Distinción del directorio actual +/* +Console.WriteLine(Directory.GetCurrentDirectory()); +*/ + +// Trabajo con directorios especiales +/* +string rutaDocumentos = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); +Console.WriteLine(rutaDocumentos); +*/ + +// Trabajo con rutas de acceso + +// Caracteres especiales de las rutas de acceso +/* +Console.WriteLine($"stores{Path.DirectorySeparatorChar}201"); +// devuelve: +// stores\201 en Windows +// +// stores/201 en macOS +*/ + +// Rutas de combinación +/* +Console.WriteLine(Path.Combine("stores","201")); +// salida: stores/201 +*/ + +// Determinación de extensiones de nombre de archivo +/* +Console.WriteLine(Path.GetExtension("sales.json")); +// salida: .json +*/ + +// Obtención de todo lo que es necesario saber sobre un archivo o ruta de acceso +/* +string nombreArchivo = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json"; + +FileInfo informacion = new(nombreArchivo); + +Console.WriteLine($"Full Name: {informacion.FullName}{Environment.NewLine}Directory: {informacion.Directory}{Environment.NewLine}Extension: {informacion.Extension}{Environment.NewLine}Create Date: {informacion.CreationTime}"); // And many more +*/ + + +// Ejercicio: Trabajar con rutas +/* +// using System.IO; +// using System.Collections.Generic; + +var directorioActual = Directory.GetCurrentDirectory(); +var directorioStores = Path.Combine(directorioActual, "stores"); +var archivosVentas = BuscarArchivos(directorioStores); + +foreach (var archivo in archivosVentas) +{ + Console.WriteLine(archivo); +} + +static IEnumerable BuscarArchivos(string nombreCarpeta) +{ + List archivosVentas = new List(); + + var archivosEncontrados = Directory.EnumerateFiles(nombreCarpeta, "*", SearchOption.AllDirectories); + + foreach (var archivo in archivosEncontrados) + { + var extension = Path.GetExtension(archivo); + if (extension == ".json") + { + archivosVentas.Add(archivo); + } + } + + return archivosVentas; +} +*/ + + +// Creación de archivos y directorios + +// Crear directorios +/* +Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "stores", "201", "newDir")); +*/ + +// Garantía de que los directorios existen +/* +string rutaArchivo = Path.Combine(Directory.GetCurrentDirectory(), "stores", "201", "newDir"); +bool existeDirectorio = Directory.Exists(rutaArchivo); +Console.WriteLine($"¿Existe la carpeta '{rutaArchivo}'?"); +Console.WriteLine($"{(existeDirectorio ? "SI" : "NO")} existe"); +*/ + +// Creación de archivos +/* +File.WriteAllText(Path.Combine(Directory.GetCurrentDirectory(), "saludo.txt"), "¡Hola Mundo!"); +*/ + + +// Ejercicio: Crear archivos y directorios +/* +// using System.IO; +// using System.Collections.Generic; + +var directorioActual = Directory.GetCurrentDirectory(); +var directorioStores = Path.Combine(directorioActual, "stores"); + +var directorioTotalVentas = Path.Combine(directorioActual, "salesTotalDir"); +Directory.CreateDirectory(directorioTotalVentas); +var archivosVentas = BuscarArchivos(directorioStores); + +File.WriteAllText(Path.Combine(directorioTotalVentas, "totals.txt"), String.Empty); + +static IEnumerable BuscarArchivos(string nombreCarpeta) +{ + List archivosVentas = new List(); + + var archivosEncontrados = Directory.EnumerateFiles(nombreCarpeta, "*", SearchOption.AllDirectories); + + foreach (var archivo in archivosEncontrados) + { + var extension = Path.GetExtension(archivo); + if (extension == ".json") + { + archivosVentas.Add(archivo); + } + } + + return archivosVentas; +} +*/ + + +// Lectura y escritura en archivos + +// Lectura de datos de archivos +/* +string archivoJson = File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json"); +Console.WriteLine(archivoJson); +*/ + +// Análisis de datos en archivos +/* +using Newtonsoft.Json; + +var ventasJson = File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json"); +var ventasDatos = JsonConvert.DeserializeObject(ventasJson); + +Console.WriteLine(ventasDatos?.Total); + +class TotalVentas +{ + public double Total { get; set; } +} +*/ + +// Escritura de datos en archivos +/* +using Newtonsoft.Json; + +var ventasJson = File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json"); +var datos = JsonConvert.DeserializeObject(ventasJson); + +File.WriteAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", datos?.Total.ToString()); +// totals.txt +// 501.22 + +class TotalVentas +{ + public double Total { get; set; } +} +*/ + +// Anexión de datos en archivos +/* +using Newtonsoft.Json; + +var ventasJson = File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json"); +var datos = JsonConvert.DeserializeObject(ventasJson); + +File.AppendAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", $"{Environment.NewLine}{datos?.Total}"); +// totals.txt +// 501.22 +// 501.22 + +class TotalVentas +{ + public double Total { get; set; } +} +*/ + + +// Ejercicio: Lectura de archivos y escritura en ellos + +// using System.IO; +// using System.Collections.Generic; +using Newtonsoft.Json; + +var directorioActual = Directory.GetCurrentDirectory(); +var directorioStores = Path.Combine(directorioActual, "stores"); + +var directorioTotalVentas = Path.Combine(directorioActual, "salesTotalDir"); +Directory.CreateDirectory(directorioTotalVentas); + +var archivosVentas = BuscarArchivos(directorioStores); + +var totalVentas = CalcularTotalVentas(archivosVentas); + +File.AppendAllText(Path.Combine(directorioTotalVentas, "totals.txt"), $"{totalVentas}{Environment.NewLine}"); + +IEnumerable BuscarArchivos(string nombreCarpeta) +{ + List archivosVentas = new List(); + + var archivosEncontrados = Directory.EnumerateFiles(nombreCarpeta, "*", SearchOption.AllDirectories); + + foreach (var archivo in archivosEncontrados) + { + var extension = Path.GetExtension(archivo); + if (extension == ".json") + { + archivosVentas.Add(archivo); + } + } + + return archivosVentas; +} + +double CalcularTotalVentas(IEnumerable archivosVentas) +{ + double totalVentas = 0; + + // Recorrer cada ruta de archivo en archivosVentas. + foreach (var archivo in archivosVentas) + { + //Leer el contenido del archivo. + string ventasJson = File.ReadAllText(archivo); + + // Analizar el contenido como JSON + DatosVentas? datos = JsonConvert.DeserializeObject(ventasJson); + + // Agregue el monto encontrado en el campo Total a la variable totalVentas. + totalVentas += datos?.Total ?? 0; + + // Console.WriteLine($"Archivo: {Path.GetRelativePath(directorioActual, archivo)}"); + // Console.WriteLine($"Ventas: {datos?.Total ?? 0}"); + // Console.WriteLine($"Acumulado: {totalVentas}\n"); + } + // Console.WriteLine($"Total Ventas: {totalVentas}"); + + return totalVentas; +} + +record DatosVentas(double Total); diff --git a/mslearn-dotnet-files.csproj b/mslearn-dotnet-files.csproj new file mode 100644 index 0000000..ec1520e --- /dev/null +++ b/mslearn-dotnet-files.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + mslearn_dotnet_files + enable + enable + + + + + + + diff --git a/salesTotalDir/totals.txt b/salesTotalDir/totals.txt new file mode 100644 index 0000000..2952eed --- /dev/null +++ b/salesTotalDir/totals.txt @@ -0,0 +1,2 @@ +2012.2000000000003 +2012.2000000000003