Compartir a través de


Clase System.IO.FileStream

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

Use la FileStream clase para leer, escribir en, abrir y cerrar archivos en un sistema de archivos y manipular otros identificadores del sistema operativo relacionados con archivos, como canalizaciones, entrada estándar y salida estándar. Puede usar los Readmétodos , Write, CopyToy Flush para realizar operaciones sincrónicas, o los ReadAsyncmétodos , WriteAsync, CopyToAsyncy FlushAsync para realizar operaciones asincrónicas. Use los métodos asincrónicos para realizar operaciones de archivos que consumen muchos recursos sin bloquear el subproceso principal. Esta consideración de rendimiento es especialmente importante en una aplicación de la Tienda Windows 8.x o una aplicación de escritorio en que una operación de streaming prolongada puede bloquear el subproceso de interfaz de usuario y hacer que parezca que una aplicación ha dejado de responder. FileStream almacena en búfer la entrada y salida para mejorar el rendimiento.

Importante

Este tipo implementa la interfaz IDisposable. Cuando haya terminado de utilizar el tipo, debe desecharlo directa o indirectamente. Para eliminar el tipo directamente, llame a su método Dispose en un bloque try/catch. Para deshacerse de él indirectamente, use una construcción de lenguaje como using (en C#) o Using (en Visual Basic). Para más información, vea la sección "Uso de objetos que implementan IDisposable" en el tema de la interfaz IDisposable.

La IsAsync propiedad detecta si el identificador de archivo se abrió de forma asincrónica. Especifique este valor al crear una instancia de la FileStream clase mediante un constructor que tenga un isAsyncparámetro , useAsynco options . Cuando la propiedad es true, la secuencia utiliza E/S superpuesta para realizar operaciones de archivo de forma asincrónica. Sin embargo, la IsAsync propiedad no tiene que ser true para llamar ReadAsyncal método , WriteAsynco CopyToAsync . Cuando la IsAsync propiedad es false y llama a las operaciones asincrónicas de lectura y escritura, el subproceso de la interfaz de usuario todavía no está bloqueado, pero la operación de E/S real se realiza de forma sincrónica.

El Seek método admite el acceso aleatorio a los archivos. Seek permite mover la posición de lectura y escritura a cualquier posición del archivo. Esto se hace con parámetros de punto de referencia de desplazamiento de bytes. El desplazamiento de bytes es relativo al punto de referencia de búsqueda, que puede ser el principio, la posición actual o el final del archivo subyacente, representado por los tres miembros de la SeekOrigin enumeración.

Nota:

Los archivos de disco siempre admiten acceso aleatorio. En el momento de la construcción, el valor de la CanSeek propiedad se establece true en o false en función del tipo de archivo subyacente. Si el tipo de archivo subyacente es FILE_TYPE_DISK, como se define en winbase.h, el valor de la CanSeek propiedad es true. De lo contrario, el valor de la CanSeek propiedad es false.

Si un proceso finaliza con parte de un archivo bloqueado o cierra un archivo que tiene bloqueos pendientes, el comportamiento no está definido.

Para las operaciones de directorio y otras operaciones de archivo, vea las Fileclases , Directoryy Path . La File clase es una clase de utilidad que tiene métodos estáticos principalmente para la creación de objetos basados en rutas de FileStream acceso de archivo. La MemoryStream clase crea una secuencia a partir de una matriz de bytes y es similar a la FileStream clase .

Para obtener una lista de las operaciones comunes de archivos y directorios, consulte Tareas comunes de E/S.

Detección de cambios en la posición de flujo

Cuando un FileStream objeto no tiene una suspensión exclusiva en su identificador, otro subproceso podría tener acceso al identificador de archivo simultáneamente y cambiar la posición del puntero de archivo del sistema operativo asociado al identificador de archivo. En este caso, la posición almacenada en caché en el FileStream objeto y los datos almacenados en caché en el búfer podrían estar en peligro. El FileStream objeto realiza de forma rutinaria comprobaciones en métodos que acceden al búfer almacenado en caché para asegurarse de que la posición de identificador del sistema operativo sea la misma que la posición almacenada en caché utilizada por el FileStream objeto.

Si se detecta un cambio inesperado en la posición del identificador en una llamada al Read método , .NET descarta el contenido del búfer y vuelve a leer la secuencia del archivo. Esto puede afectar al rendimiento, en función del tamaño del archivo y de cualquier otro proceso que pueda afectar a la posición de la secuencia de archivos.

Si se detecta un cambio inesperado en la posición de identificador en una llamada al Write método , se descarta el contenido del búfer y se produce una IOException excepción.

Un FileStream objeto no tendrá una suspensión exclusiva en su identificador cuando se tenga acceso a la SafeFileHandle propiedad para exponer el identificador o al FileStream objeto se le asigna la SafeFileHandle propiedad en su constructor.