2009-11-10 12 views
10

Sto cercando di capire come scrivere un file binario con un FileStream e BinaryWriter e mantenere il file bloccato per la lettura mentre sto scrivendo. In particolare, non voglio che altre applicazioni/processi possano leggere dal momento mentre vengono scritti.Come posso bloccare un file durante la scrittura tramite 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(); 

Ora il problema è che il file può essere aperto da altre applicazioni durante la scrittura, il che è indesiderabile nella mia attuale applicazione. Il FileStream ha un metodo di blocco, ma quello si blocca per la scrittura e non per la lettura, quindi non mi aiuta.

risposta

23

Stai cercando il fourth parameter of the FileStream Constructor.

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

Quindi nel tuo caso:

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

FileShare -Enum:

contiene costanti per controllare il tipo di accesso di altri FileStream oggetti possono avere allo stesso file.

Membri:

  • Nessuno, declina la condivisione del file corrente. Qualsiasi richiesta di apertura del file (tramite questo processo o un altro processo) avrà esito negativo fino alla chiusura del file.
  • Leggi, consente l'apertura successiva del file per la lettura. Se questo flag non viene specificato, qualsiasi richiesta di apertura del file per la lettura (tramite questo processo o un altro processo) avrà esito negativo fino alla chiusura del file. Tuttavia, anche se questo flag è specificato, potrebbero essere necessarie ulteriori autorizzazioni per accedere al file.
  • Scrivi, consente l'apertura successiva del file per la scrittura. Se questo flag non viene specificato, qualsiasi richiesta di apertura del file per la scrittura (tramite questo processo o un altro processo) avrà esito negativo fino alla chiusura del file. Tuttavia, anche se questo flag è specificato, potrebbero essere necessarie ulteriori autorizzazioni per accedere al file.
  • ReadWrite, consente l'apertura successiva del file per la lettura o la scrittura. Se questo flag non viene specificato, qualsiasi richiesta di aprire il file per la lettura o la scrittura (tramite questo processo o un altro processo) avrà esito negativo fino alla chiusura del file. Tuttavia, anche se questo flag è specificato, potrebbero essere necessarie ulteriori autorizzazioni per accedere al file.
  • Cancella, Permette la successiva cancellazione di un file.
  • Eredable, rende l'handle del file ereditabile dai processi secondari. Questo non è direttamente supportato da Win32.
-1

Non so se è possibile.

Ad esempio, Firefox archivia i file durante il download utilizzando un altro nome finché non sono terminati. Quando tutto è lì, lo rinomina con il nome originale. Un suffisso di file diverso eviterà che gli utenti provino ad aprirlo con un doppio clic.

Problemi correlati