👽
3ntr0 Apuntes
  • 📚Principios SOLID y Clean Code
    • 💲Deuda Técnica
    • 📌Mejorar Nombres
      • 📄Nombre según Tipo
      • 🚗Nombre Clases
      • ⚙️Nombres Funciones
    • ☑️Mejorar Funciones
    • ➿Principio DRY
    • 🧼Clean Code en Clases (POO)
      • 📘 Principio de Responsabilidad Única (SRP)
    • 🤮🇸 🇹 🇺 🇵 🇮 🇩 - Code Smells
      • 🚫Singleton
      • 🙏Tight Coupling
      • 🥸U P I D
      • 🚩Más Code Smells
  • 💕Angular
    • 🏍️Standalone
    • 🆚ngClass vs [class.clase]
    • 🩻Directivas
    • 🚩ElementRef
    • 🎀Decoradores
      • @HostListener
    • 🔄OnChanges
    • 🧪Testing - Jasmine y Karma
      • 🚀Módulo 1: Introducción a las pruebas unitarias
      • 🧫Módulo 2: Introducción a Jasmine
      • ⚒️Módulo 3: Introducción a Karma
      • 🔬Módulo 4: Pruebas unitarias en Angular
        • Código comentado Paso a Paso
      • 🕵️‍♂️Módulo 5: Técnicas avanzadas en Jasmine
      • 📚Módulo 6: Técnicas avanzadas en Karma
  • 🖼️HTML y CSS
    • 🖌️Custom Properties
    • Trucos
    • Brakepoints
  • 🧋Javascript
    • 🛠️Funciones
    • 📦Arrays
      • Every y Some
      • Map
      • Reduce
    • 😎Hoisting
    • 🪚Desestructuración
    • 🛻Programación Asincrona
      • 📞Callbacks
      • 🌟Promises
      • 🆚Promise.all Y Promise.any
      • 🚀Async/Await
    • Respuestas HTTP
    • 🧐Dudas Básicas
      • NodeList
      • 🧐Contextos de .this
      • 💭Parametro Rest
      • 🗨️arguments
      • 🙀JavaScript no tiene clases
      • 🆚Null vs Undefined
      • 🔎Operador in
      • 🟨Operador Spread
      • ❓Encadenamiento Opcional
      • 🔲Notación de Corchetes
      • ⛓️Coalescencia Nula (??)
      • 🆚Shallow Copy vs Deep Copy
      • 🆚.json VS JSON.parse
      • ⚙️Fetch wrapper
      • Sets
      • Maps
  • 📒Terminología
    • 💎Esenciales
    • Web
    • Javascript
  • 🌐GIT
    • Source Tree
  • 🧬React
    • 🫂Babel
  • 🔧 Fundamentos de C#
    • 🎛️General
      • 🧐Diferencia Equals y ==
      • 🧐Diferencia entre typeof y .GetType()
      • 📐Convenciones de Nomenclatura
    • 💠Summary
    • 📇.resx
    • 📄Strings
      • ⛓️Comparación de cadenas
    • 🧲Regex
    • 📦POO
      • 🚙Clases
        • ✏️Clase String
        • 📥Métodos de Acceso
        • ⚗️Métodos de Extensión
    • 🖇️Pattern Matching
    • 🚩Excepciones
    • Programación Asíncrona
    • 🔎LINQ
      • 🅿️PLINQ
  • 🌐 Desarrollo Web con ASP.NET
    • 🧬Modelos
      • 🗒️Data Annotations
        • 📑Lista
        • 🧪Atributos
          • 🛠️Atributos Personalizados
          • 🧰AttributeUsage
          • 📥Acceso a los atributos
        • 📚Documentación
    • 👷Servicios
      • ⭐Servicios Singleton
    • ⏳Sesiones
      • 🧭Temp Data
    • DbContext
      • 🔄Eager Loading
    • 🥽Manejo de Datos
      • 🗃️Archivos
        • 📤Subida de Archivos
        • ✏️Leer y Escribir
        • 🕓Manejo de Archivos Temporales
        • 🛡️Validación de Archivos en ASP.NET Core
      • Colecciones
        • 🪜Pila (Stack)
        • 🏇Cola (Queue)
      • 🩻Manejo de XMLs
        • 📂XmlDocument
          • 🎯XPath
        • 🧿XmlReader
    • ❤️Tips y Utilities
      • 🟰StringComparison
    • 🧰Debug Tools
      • 🧭Stopwatch
  • 🚀Razor
    • 🧱Configuración de Proyecto
    • 📃Pages
      • 🔸Método OnGet
      • 🔸Carpeta Models
      • 🔸Partial Pages
    • 🎨Layouts
      • Aplicar CSS A UNA PAGE
    • 🚴‍♂️Routing
    • 🏢_ViewImports
    • ✒️Sintaxis Razor
      • 😀Introducción
      • 📔Expresiones Implícitas
      • 📕Expresiones Explícitas
      • ✍️Renderizar Texto
      • 🧑‍🔬Class Page Model
      • 🔖Tag Helpers
        • 🔹asp-page
        • 🔹asp-append-version
        • 🔹asp-for
        • 🔹asp-items
        • 🔹asp-action y asp-controller
  • 🔮LUA
    • 🎯Fundamentos
    • ⌨️Entrada por Consola
    • 🔗Estructuras de Control
    • ⚒️Funciones
    • 📦Tablas
    • 📚Funciones y Librerías Estándar
    • 🦖POO
Con tecnología de GitBook
En esta página
  • 💾 FileStream: Manejo de Archivos en .NET
  • 🧩 Uso Básico de FileStream
  • El método WriteToFileAsync:
  • El método ReadFromFileAsync:
  1. 🌐 Desarrollo Web con ASP.NET
  2. Manejo de Datos
  3. Archivos

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.

AnteriorSubida de ArchivosSiguienteManejo de Archivos Temporales

Última actualización hace 1 año

🥽
🗃️
✏️