Lectura y escritura en archivos
La lectura y la escritura de datos en archivos son conceptos básicos en .NET.
Tailwind Traders debe escribir el total de todos los archivos de ventas de la tienda individuales en un nuevo archivo y a continuación, cargar el archivo en el sistema de ventas de la empresa.
Aquí se aprende usar la clase File
para leer archivos y escribir en ellos.
Lectura de datos de archivos
Los archivos se leen a través del método ReadAllText
de la clase File
.
File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");
El objeto que se devuelve de ReadAllText
es una cadena.
{
"total": 22385.32
}
Análisis de datos en archivos
Estos datos en su formato de cadena no nos aportan demasiado. Son solo caracteres, si bien ahora tienen un formato que se puede leer. Lo que se quiere es la capacidad de analizar estos datos en un formato que podamos usar mediante programación.
Hay muchas maneras de analizar archivos JSON con .NET, incluida una biblioteca de la comunidad conocida como Json.NET.
Puede agregar el paquete Json.NET al proyecto mediante NuGet:
dotnet add package Newtonsoft.Json
Después, agregue using Newtonsoft.Json
a la parte superior del archivo de clase:
using Newtonsoft.Json;
Y use el método JsonConvert.DeserializeObject
:
var salesJson = File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");
var salesData = JsonConvert.DeserializeObject<SalesTotal>(salesJson);
Console.WriteLine(salesData.Total);
class SalesTotal
{
public double Total { get; set; }
}
Sugerencia
Los archivos presentan una gran variedad de formatos. Los archivos JSON son los que más nos conviene usar debido a su compatibilidad integrada en el lenguaje, pero también se puede encontrar con archivos .csv, de ancho fijo o con cualquier otro formato. En tal caso, lo mejor es buscar en nuget.org un analizador acorde a ese tipo de archivo.
Escritura de datos en archivos
En el ejercicio anterior ha aprendido a escribir archivos; pero simplemente ha escrito uno vacío. Para escribir datos en un archivo, use el mismo método WriteAllText
, pero pase los datos que quiera escribir.
var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);
File.WriteAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", data.Total.ToString());
// totals.txt
// 22385.32
Anexión de datos en archivos
En el ejemplo anterior, el archivo se sobrescribe cada vez que se escribe en él. A veces no quiere eso. Quiere anexar datos al archivo en lugar de reemplazarlos por completo. Puede anexar datos con el método File.AppendAllText
. De forma predeterminada, File.AppendAllText
creará el archivo si aún no existe.
var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);
File.AppendAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", $"{data.Total}{Environment.NewLine}");
// totals.txt
// 22385.32
// 22385.32
Sugerencia
En el código de ejemplo anterior, Environment.NewLine
indica a .NET que ponga el valor en su propia línea. Si no pasara este valor, obtendría todos los números apelotonados en la misma línea.
En el ejercicio siguiente, finalizaremos el proyecto de totales de ventas de Tailwind Traders mediante la lectura de todos los archivos de ventas y la escritura del total general en un archivo .txt. Posteriormente, el sistema comercial de la empresa puede procesar el archivo.