2009-11-10 5 views
10

estoy tratando de encontrar la manera de escribir un archivo binario con una FileStream y BinaryWriter, y guarda el archivo bloqueado para lectura mientras estoy escribiendo. Específicamente, no quiero que otras aplicaciones/procesos puedan leer mientras se escriben.¿Cómo puedo bloquear un archivo mientras escribo en él a través de FileStream?

//code to declare ba as a byte array 

//dpath is the path to the file 

FileStream BinaryFile = new FileStream(dpath, FileMode.Create, FileAccess.Write); 

BinaryWriter Writer = new BinaryWriter(BinaryFile); 

Writer.Write(ba); 

Writer.Close(); 

BinaryFile.Dispose(); 

Ahora el problema es que otras aplicaciones pueden abrir el archivo durante la escritura, lo cual es indeseable en mi aplicación actual. El FileStream tiene un método de bloqueo, pero se bloquea para escribir y no para leer, así que eso no me ayuda.

Respuesta

23

Usted está buscando el fourth parameter of the FileStream Constructor.

public FileStream(
    string path, 
    FileMode mode, 
    FileAccess access, 
    FileShare share 
) 

Así, en su caso:

FileStream BinaryFile = new FileStream(dpath, FileMode.Create, 
             FileAccess.Write, FileShare.None); 

FileShare -Enum:

contiene constantes para controlar el tipo de acceso a otros FileStream objetos pueden tener en el mismo archivo.

Miembros:

  • Ninguno, la disminución de compartir el archivo actual. Cualquier solicitud para abrir el archivo (mediante este proceso u otro proceso) fallará hasta que se cierre el archivo.
  • Leer, permite la apertura posterior del archivo para lectura. Si no se especifica este indicador, cualquier solicitud para abrir el archivo para su lectura (mediante este proceso u otro) fallará hasta que se cierre el archivo. Sin embargo, incluso si se especifica este indicador, aún pueden necesitarse permisos adicionales para acceder al archivo.
  • Escribir, permite la apertura posterior del archivo para escritura. Si no se especifica este indicador, cualquier solicitud para abrir el archivo para la escritura (mediante este proceso u otro) fallará hasta que se cierre el archivo. Sin embargo, incluso si se especifica este indicador, aún pueden necesitarse permisos adicionales para acceder al archivo.
  • ReadWrite, permite la apertura posterior del archivo para lectura o escritura. Si no se especifica este indicador, cualquier solicitud para abrir el archivo para lectura o escritura (mediante este proceso u otro) fallará hasta que se cierre el archivo. Sin embargo, incluso si se especifica este indicador, aún pueden necesitarse permisos adicionales para acceder al archivo.
  • Eliminar, permite eliminar posterior de un archivo.
  • Heredable, hace que el identificador de archivo heredables por los procesos hijos. Esto no es soportado directamente por Win32.
-1

No sé si es posible.

Por ejemplo Firefox almacena archivos mientras se descargan utilizando otro nombre hasta que hayan terminado. Cuando todo está allí, le cambia el nombre por el nombre original. Un sufijo de archivo diferente evitará que los usuarios intenten abrirlo con un doble clic.

Cuestiones relacionadas