2011-05-17 18 views
12

Me pregunto si es posible conseguir un FileStream de sólo lectura a un archivo bloqueado? Ahora obtengo una excepción cuando intento leer el archivo bloqueado.FileStream con el archivo bloqueado

using (FileStream stream = new FileStream("path", FileMode.Open)) 

¡Gracias!

+0

La línea que muestra no intenta leer un archivo bloqueado, es donde está intentando abrir un archivo. ¿Estás creando este archivo en otro lugar? Si existe una condición de bloqueo, probablemente esté haciendo algo para crear esa condición. Por favor, muestre más del código alrededor de la línea que enumeró. –

Respuesta

27

Usted debe tratar de otro constructor. Están documentados en MSDN.

Este se ve como una apuesta:

FileStream Constructor (String, FileMode, FileAccess, FileShare) 

MSDN Link

FileAccess

Una constante que determina cómo el archivo se puede acceder por el objeto FileStream. Esto obtiene las propiedades CanRead y CanWrite del objeto FileStream. CanSeek es verdadero si path especifica un archivo de disco.

FileShare

Una constante que determina cómo el archivo será compartido por procesos.

+0

¡Respuesta impresionante! ¡Gracias! –

6
using (FileStream stream = new FileStream("path", FileMode.Open)) 

que usará el valor por defecto para el argumento FileShare, FileShare.Read. Que niega cualquier proceso de escribir en el archivo. Eso no puede funcionar si otro proceso está escribiendo en el archivo, no puede negar un derecho que ya se ganó.

tiene que especificar FileShare.ReadWrite. Eso aún podría no funcionar si el otro proceso usó FileShare.None, no hay solución para eso. Tenga en cuenta que obtener acceso de lectura a un archivo que se está escribiendo es problemático, no tiene una indicación confiable de fin de archivo. El último registro o línea en el archivo podría haber sido escrito parcialmente.

-1

Simplemente puede desbloquear archivos y leer el archivo después de ella. Simplemente use Handle.exe desde Sysinternals o Unlocker con opciones de línea de comando. Ambos pueden desbloquear el archivo, y puede ejecutarlos desde su programa fácilmente, sin salir de su programa. (Pero no los use para el archivo Windows SAM, no funciona con SAM;)) ¡Buena suerte!

0

he utilizado los siguientes elementos que funciona, sin embargo se debe utilizar con precaución ya que el archivo puede ser modificado mientras lo tiene abierto por otro proceso.

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite); 
Cuestiones relacionadas