【问题标题】:Prevent a user from deleting, moving or renaming a file防止用户删除、移动或重命名文件
【发布时间】:2017-09-28 20:18:25
【问题描述】:

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

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

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

【问题讨论】:

  • 这听起来像是一个非常不寻常的用例。我很好奇你是如何发现自己处于这种情况的......你愿意进一步解释吗?也许有一个架构解决方案。

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


【解决方案1】:

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

使用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
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多