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