防止用户删除、移动或重命名文件

16
我试图做的是,在我的程序使用一个文件时,我想防止用户重命名、删除或移动该文件(嗯...根据Windows FileSystemWatcher,移动是在不同位置创建和删除,但我跑题了)。
有人建议我使用FileStream.Lock或使用Mutex。然而,FileStream.Lock似乎只能防止文件被修改,而我正试图允许它被修改。此外,我非常不确定互斥体是否可以锁定文件,尽管我仍在.NET 4.0库中阅读相关资料。
有人有关于如何利用这两种方法以及是否有基于代码的解决方案来解决这个问题的建议吗?
2个回答

22
当您打开文件时,可以指定共享模式。
使用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();

哇,这甚至可以防止文件重命名。谢谢你,这将比我想象的要好,因为它甚至会弹出微软对话框:D - Blaze Phoenix

3
这将防止移动或删除文件,但允许读写:
    using (FileStream fs = new FileStream(@"C:\TestDir\Test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        // Do Stuff.
    }

FileStream.Lock实际上是一个范围锁,它在持有锁的同时防止对文件的特定部分进行修改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接