Как заблокировать файл при записи в него через FileStream?
Я пытаюсь выяснить, как написать двоичный файл с помощью FileStream
и BinaryWriter
, и держите файл заблокированным для чтения, пока я пишу. Я специально не хочу, чтобы другие приложения/процессы могли читать с момента его написания.
//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();
теперь проблема в том, что файл может быть открыт другими приложениями во время записи, что нежелательно в моем текущем приложении. The FileStream
имеет метод блокировки, но это блокирует для записи, а не для чтение, так что это мне не поможет.
2 ответов
Вы ищите четвертый параметр FileStream
конструктор.
public FileStream(
string path,
FileMode mode,
FileAccess access,
FileShare share
)
Так в вашем случае:
FileStream BinaryFile = new FileStream(dpath, FileMode.Create,
FileAccess.Write, FileShare.None);
FileShare-перечисления:
содержит константы для управления видом доступа другой FileStream объекты могут иметь один и тот же файл.
участники:
- нет, отклоняет совместное использование текущего файла. Любой запрос на открытие файла (по этому процесс или другой процесс) завершится ошибкой, пока файл не будет закрыт.
- читать, допускает последующее открытие файла для чтения. Если этот флаг не указан, любой запрос на открытие файла для чтения (этим или другим процессом) завершится ошибкой, пока файл не будет закрыт. Однако даже если этот флаг указан, для доступа к файлу могут потребоваться дополнительные разрешения.
- написать, позволяет последующее открытие файла для пишу. Если этот флаг не указан, любой запрос на открытие файла для записи (этим или другим процессом) завершится ошибкой, пока файл не будет закрыт. Однако даже если этот флаг указан, для доступа к файлу могут потребоваться дополнительные разрешения.
- ReadWrite, допускает последующее открытие файла для чтения или записи. Если этот флаг не указан, любой запрос на открытие файла для чтения или записи (этим или другим процессом) будет не пока файл не будет закрыт. Однако даже если этот флаг указан, для доступа к файлу могут потребоваться дополнительные разрешения.
- удалить, позволяет последующее удаление файла.
- наследование, делает дескриптор файла наследоваться дочерними процессами. Это не поддерживается напрямую Win32.
Я не знаю, возможно ли это.
например, Firefox хранит файлы при загрузке, используя другое имя, пока они не будут закончены. Когда все есть, он переименовывает его в первоначальное название. Другой суффикс файла позволит избежать того, что пользователи пытаются открыть его двойным щелчком мыши.