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

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

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

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

3 ответов


при открытии файла можно указать режим обмена.

открытие файла с помощью флагами fileaccess.Читать дает вам возможность прочитать файл, в то время как 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();

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

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

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


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

StreamWriter sw = new StreamWriter(path);