防止用户删除,移动或重命名文件
我想要做的是当我的程序使用文件时,我想让用户不要重命名,删除或移动文件(好吧……根据Windows,移动是删除和创建在不同的位置) FileSystemWatcher ,但我离题了)。
有人建议我使用FileStream.Lock或使用Mutex 。 但是,FileStream.Lock似乎只是为了防止文件被修改,我试图允许 。 另外,我不确定互斥锁是否可以锁定文件,尽管我仍然在.Net 4.0库中读取它。
有没有人有任何建议,如果有一个基于代码的解决方案来解决这个问题?
打开文件时,可以指定共享模式。
使用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();
这将阻止移动或删除文件,但允许读写:
using (FileStream fs = new FileStream(@"C:\TestDir\Test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { // Do Stuff. }
FileStream.Lock实际上是一个范围锁,它可以防止在保持锁定时修改文件的特定部分。
如果你想锁定一切(不读,不写,不删除,不要移动,……)
打开StreamWriter
StreamWriter sw = new StreamWriter(path);