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

时间:2012-07-03 20:26:24

标签: c# move delete-file file-rename

我想要做的是当我的程序使用文件时,我想让用户不要重命名,删除或移动文件(好吧......移动是删除和创建在不同的位置根据Windows FileSystemWatcher,但我离题了。)

有人建议我使用FileStream.Lock或使用Mutex。但是,FileStream.Lock似乎只是为了防止文件被修改我试图允许。此外,我不确定互斥锁是否可以锁定文件,尽管我仍然在.Net 4.0库中阅读它。

有没有人有任何关于使用其中任何一个的建议,以及是否有基于代码的解决方案来解决这个问题?

2 个答案:

答案 0 :(得分:21)

打开文件时,您可以指定共享模式。

使用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();

答案 1 :(得分:3)

这将阻止移动或删除文件,但允许读写:

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

FileStream.Lock实际上是一个范围锁,它可以防止在锁定时修改文件的特定部分。