Запретить пользователю удалять, перемещать или переименовывать файл
То, что я пытаюсь сделать, - это когда моя программа использует файл, я хочу, чтобы пользователь не переименовал, не удалил или не переместил файл (ну... перемещение - это удаление и создание в другом месте в соответствии с Windows FileSystemWatcher, но я отвлекаюсь).
Было предложено использовать
FileStream.Lock или использовать
Mutex. Однако FileStream.Lock, по-видимому, только предотвращает изменение файла, который я пытаюсь разрешить. Кроме того, я очень не уверен, что если мьютекс может заблокировать файл, хотя я все еще читаю его в библиотеке .Net 4.0.
Есть ли у кого-нибудь советы по использованию одного из них, и если есть решение на основе кода для этой проблемы?
Ответы
Ответ 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);