Как я могу заблокировать файл при записи в него через FileStream?

Я пытаюсь выяснить, как записать двоичный файл с a 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();

Теперь проблемой является файл, может быть открыт другими приложениями во время записи, которая является нежелательным в моем текущем приложении. FileStream имеет Метод Блокировки, но это блокирует для записи а не для чтения, так, чтобы не помогал мне.

10
задан Bobby 23 August 2012 в 07:19
поделиться

2 ответа

Вы ищете четвертый параметр конструктора FileStream .

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

Итак, в вашем случае:

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

FileShare -Enum:

Содержит константы для управления видом доступа к другому FileStream объекты могут относиться к одному и тому же файлу.

Члены:

  • Нет , запрещает совместное использование текущего файла. Любой запрос на открытие файла (этим или другим процессом) не будет выполнен, пока файл не будет закрыт.
  • Чтение , Разрешает последующее открытие файла для чтения. Если этот флаг не указан, любой запрос на открытие файла для чтения (этим или другим процессом) не будет выполнен, пока файл не будет закрыт. Однако, даже если этот флаг установлен, для доступа к файлу все равно могут потребоваться дополнительные разрешения.
  • Запись , Разрешает последующее открытие файла для записи. Если этот флаг не указан, любой запрос на открытие файла для записи (этим или другим процессом) не будет выполнен, пока файл не будет закрыт. Однако, даже если этот флаг указан, для доступа к файлу все равно могут потребоваться дополнительные разрешения.
  • ReadWrite , разрешает последующее открытие файла для чтения или записи. Если этот флаг не указан, любой запрос на открытие файла для чтения или записи (этим или другим процессом) не будет выполнен, пока файл не будет закрыт. Однако, даже если этот флаг указан, для доступа к файлу все равно могут потребоваться дополнительные разрешения.
  • Удалить , разрешает последующее удаление файла.
  • Inheritable , Делает дескриптор файла наследуемым дочерним элементом процессы. Это напрямую не поддерживается Win32.
23
ответ дан 3 December 2019 в 17:59
поделиться

Я не знаю, возможно ли это.

Например, Firefox сохраняет файлы при загрузке с другим именем, пока они не будут завершены. Когда все есть, он переименовывает его в исходное имя. Другой суффикс файла предотвратит попытки пользователей открыть его двойным щелчком.

Например, Firefox сохраняет файлы при загрузке под другим именем, пока они не будут завершены. Когда все есть, он переименовывает его в исходное имя. Другой суффикс файла предотвратит попытки пользователей открыть его двойным щелчком.

Например, Firefox сохраняет файлы при загрузке под другим именем, пока они не будут завершены. Когда все есть, он переименовывает его в исходное имя. Другой суффикс файла предотвратит попытки пользователей открыть его двойным щелчком.

-1
ответ дан 3 December 2019 в 17:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: