14

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

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

有没有人对使用任何一个有任何建议,如果有基于代码的解决方案来解决这个问题?

4

2 回答 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();
于 2012-07-03T20:32:40.580 回答
3

这将防止移动或删除文件,但允许读取和写入:

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

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

于 2012-07-03T20:43:46.867 回答