Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 la que una operación de secuencia que consume mucho tiempo puede bloquear el subproceso de la interfaz de usuario y hacer que la aplicación aparezca como si no estuviera funcionando. FileStream almacena en búfer la entrada y salida de datos para mejorar el rendimiento.
Importante
Este tipo implementa la IDisposable interfaz . 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 eliminarlo indirectamente, use una construcción de lenguaje como using
(en C#) o Using
(en Visual Basic). Para obtener más información, vea la sección "Using an Object that Implements IDisposable" (Usar un objeto que implementa IDisposable) en el tema de 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 isAsync
parámetro , useAsync
o options
. Cuando la propiedad es true
, la secuencia utiliza E/S superpuesta para realizar operaciones de archivo de forma asincrónica. Sin embargo, la propiedad IsAsync no tiene que ser true
para llamar a los métodos ReadAsync, WriteAsync o CopyToAsync. Cuando la IsAsync propiedad es false
y se invocan las operaciones asincrónicas de lectura y escritura, el subproceso de la interfaz de usuario no se bloquea, 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, tal como está representado por los tres miembros de la enumeración SeekOrigin.
Nota:
Los archivos de disco siempre admiten acceso aleatorio. En el momento de la construcción, el valor de la propiedad CanSeek se establece en true
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 archivo de FileStream. 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 un control exclusivo sobre su identificador, otro subproceso podría acceder al identificador de archivo a la vez 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 método Read, .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 del identificador en una llamada al método Write, se descarta el contenido del búfer y se produce una excepción IOException.
Un objeto FileStream no tendrá un control exclusivo sobre su identificador cuando se acceda a la propiedad SafeFileHandle para exponer el control o cuando al objeto FileStream se le da la propiedad SafeFileHandle en su constructor.