Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
323 changes: 323 additions & 0 deletions Program.cs
Original file line number Diff line number Diff line change
@@ -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<string> listaDeDirectorios = Directory.EnumerateDirectories("stores");

foreach (var directorio in listaDeDirectorios) {
Console.WriteLine(directorio);
}
*/

// Enumeración de los archivos de un directorio específico
/*
IEnumerable<string> 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<string> 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<string> BuscarArchivos(string nombreCarpeta)
{
List<string> archivosVentas = new List<string>();

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<string> BuscarArchivos(string nombreCarpeta)
{
List<string> archivosVentas = new List<string>();

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<string> BuscarArchivos(string nombreCarpeta)
{
List<string> archivosVentas = new List<string>();

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<TotalVentas>(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<TotalVentas>(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<TotalVentas>(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<string> BuscarArchivos(string nombreCarpeta)
{
List<string> archivosVentas = new List<string>();

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<string> 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<DatosVentas?>(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);
15 changes: 15 additions & 0 deletions mslearn-dotnet-files.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>mslearn_dotnet_files</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
</ItemGroup>

</Project>
2 changes: 2 additions & 0 deletions salesTotalDir/totals.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
2012.2000000000003
2012.2000000000003