✏️Leer y Escribir
💾 FileStream: Manejo de Archivos en .NET
Definición:
FileStream
es una clase que proporciona una vista de secuencia para leer y escribir en archivos.Uso Común: Se utiliza para operaciones de entrada/salida en el sistema de archivos.
🧩 Uso Básico de FileStream
Crear un
FileStream
: InstanciarFileStream
para crear, leer o escribir en un archivo.Leer y Escribir: Ofrece métodos
ReadAsync
yWriteAsync
para trabajar con datos de forma asíncrona.
static async Task Main()
{
string path = "test.txt";
string textToWrite = "Ejemplo de texto a escribir en el archivo.";
// Escribir en el archivo de manera asincrónica
await WriteToFileAsync(path, textToWrite);
// Leer el archivo de manera asincrónica
string readText = await ReadFromFileAsync(path);
Console.WriteLine(readText);
}
static async Task WriteToFileAsync(string filePath, string text)
{
byte[] encodedText = Encoding.UTF8.GetBytes(text);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Create, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}
static async Task<string> ReadFromFileAsync(string filePath)
{
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Open, FileAccess.Read, FileShare.Read,
bufferSize: 4096, useAsync: true))
{
StringBuilder sb = new StringBuilder();
byte[] buffer = new byte[0x1000];
int numRead;
while ((numRead = await sourceStream.ReadAsync(buffer, 0, buffer.Length)) != 0)
{
string text = Encoding.UTF8.GetString(buffer, 0, numRead);
sb.Append(text);
}
return sb.ToString();
}
}
}
El método WriteToFileAsync
:
WriteToFileAsync
:Convierte el texto a un arreglo de bytes usando la codificación UTF-8. Esto es necesario porque
FileStream
trabaja con bytes.Crea un nuevo
FileStream
con la ruta del archivo, indicando que vamos a crear el archivo y tener acceso de escritura.La opción
FileShare.None
significa que mientras estemos escribiendo, ningún otro proceso podrá acceder al archivo.bufferSize: 4096
define el tamaño del búfer. Un búfer es como un área de almacenamiento temporal para los datos que estamos leyendo o escribiendo.useAsync: true
indica que vamos a usar operaciones asincrónicas con este flujo de archivo.await sourceStream.WriteAsync(encodedText, 0, encodedText.Length)
escribe el arreglo de bytes al archivo de manera asincrónica. Elawait
es lo que permite que la operación se ejecute sin bloquear el hilo principal.
El método ReadFromFileAsync
:
ReadFromFileAsync
:Crea un nuevo
FileStream
para leer el archivo existente.Inicializa un objeto
StringBuilder
para acumular el texto que vamos a leer.Crea un búfer para leer los datos.
Usa un bucle
while
para leer el archivo hasta que no haya más datos (numRead = 0
).Dentro del bucle,
await sourceStream.ReadAsync(buffer, 0, buffer.Length)
lee los datos de manera asincrónica en el búfer.Encoding.UTF8.GetString(buffer, 0, numRead)
convierte los bytes leídos a una cadena de texto.sb.Append(text)
agrega el texto leído alStringBuilder
.Finalmente, retorna el texto completo como una cadena.
Última actualización