Подтвердить что ты не робот

Запретить пользователю удалять, перемещать или переименовывать файл

То, что я пытаюсь сделать, - это когда моя программа использует файл, я хочу, чтобы пользователь не переименовал, не удалил или не переместил файл (ну... перемещение - это удаление и создание в другом месте в соответствии с Windows FileSystemWatcher, но я отвлекаюсь).

Было предложено использовать FileStream.Lock или использовать Mutex. Однако FileStream.Lock, по-видимому, только предотвращает изменение файла, который я пытаюсь разрешить. Кроме того, я очень не уверен, что если мьютекс может заблокировать файл, хотя я все еще читаю его в библиотеке .Net 4.0.

Есть ли у кого-нибудь советы по использованию одного из них, и если есть решение на основе кода для этой проблемы?

4b9b3361

Ответ 1

Когда вы открываете файл, вы можете указать режим совместного доступа.

Открытие файла с FileAccess.Read дает вам возможность читать файл, а FileShare.ReadWrite позволяет файлу продолжать редактироваться, но не удаляться и не перемещаться.

var fs = File.Open(@"C:\temp\file.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
MessageBox.Show("File Locked");  // While the messagebox is up, try to open or delete the file.
// Do your work here
fs.Close();

Ответ 2

Это предотвратит перемещение или удаление файла, но позволяет читать и записывать:

    using (FileStream fs = new FileStream(@"C:\TestDir\Test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        // Do Stuff.
    }

FileStream.Lock - это фактически блокировка диапазона, которая предотвращает модификацию определенной части файла во время блокировки.

Ответ 3

Если вы хотите заблокировать все (не читайте, не пишите, не удаляйте, не двигайтесь,...)
Откройте StreamWriter

StreamWriter sw = new StreamWriter(path);