2009-11-10 14 views
10

Próbuję dowiedzieć się, jak napisać plik binarny z FileStream i BinaryWriter i zachować plik zablokowany do odczytu podczas pisania. Nie chcę, aby inne aplikacje/procesy mogły odczytywać od zera, podczas gdy są zapisywane.Jak mogę zablokować plik podczas zapisu do niego przez 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(); 

Problem polega na tym, że plik może zostać otwarty przez inne aplikacje podczas zapisu, co jest niepożądane w mojej bieżącej aplikacji. FileStream ma metodę blokowania, ale blokuje to pisanie, a nie czytanie, więc to mi nie pomaga.

Odpowiedz

23

Poszukujesz numeru fourth parameter of the FileStream Constructor.

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

Więc w twoim przypadku:

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

FileShare -Enum:

zawiera stałe do kontrolowania rodzaju dostępu FileStream inne obiekty mogą mieć do tego samego pliku.

Członkowie:

  • Żaden spadki dzielenia bieżącego pliku. Każde żądanie otwarcia pliku (przez ten proces lub inny proces) zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty.
  • Przeczytaj, Umożliwia późniejsze otwieranie pliku do odczytu. Jeśli ta flaga nie zostanie określona, ​​każde żądanie otwarcia pliku do odczytu (przez ten proces lub inny proces) zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty. Jednak nawet jeśli ta flaga zostanie określona, ​​dodatkowe uprawnienia mogą nadal być potrzebne, aby uzyskać dostęp do pliku.
  • Napisz, Umożliwia późniejsze otwarcie pliku do zapisu. Jeśli ta flaga nie zostanie określona, ​​każde żądanie otwarcia pliku do zapisu (przez ten proces lub inny proces) zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty. Jednak nawet jeśli ta flaga zostanie określona, ​​dodatkowe uprawnienia mogą nadal być potrzebne, aby uzyskać dostęp do pliku.
  • ReadWrite, Umożliwia późniejsze otwieranie pliku do odczytu lub zapisu. Jeśli ta flaga nie zostanie określona, ​​każde żądanie otwarcia pliku do odczytu lub zapisu (przez ten proces lub inny proces) zakończy się niepowodzeniem, dopóki plik nie zostanie zamknięty. Jednak nawet jeśli ta flaga zostanie określona, ​​dodatkowe uprawnienia mogą nadal być potrzebne, aby uzyskać dostęp do pliku.
  • Usuń, Umożliwia późniejsze usunięcie pliku.
  • Dziedziczony, Sprawia, że ​​uchwyt pliku jest dziedziczony przez procesy podrzędne. Nie jest to obsługiwane bezpośrednio przez Win32.
-1

Nie wiem, czy to możliwe.

Na przykład Firefox przechowuje pliki podczas pobierania za pomocą innej nazwy, dopóki nie zostaną zakończone. Kiedy wszystko tam jest, zmienia nazwę na oryginalne imię. Inny sufiks pliku pozwoli uniknąć tego, że użytkownicy będą go otwierać za pomocą dwukrotnego kliknięcia.

Powiązane problemy