✏️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: Instanciar FileStream para crear, leer o escribir en un archivo.

  • Leer y Escribir: Ofrece métodos ReadAsync y WriteAsync 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:

  • 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. El await es lo que permite que la operación se ejecute sin bloquear el hilo principal.

El método 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 al StringBuilder.

  • Finalmente, retorna el texto completo como una cadena.

Última actualización