C#访问锁定的文件

时间:2011-07-13 11:50:47

标签: c# file filelock

我想通过c#访问一个文件,该文件已创建并仍然通过其他程序处理 目前,我正在通过Windows资源管理器将文件复制到其他位置,然后使用该副本进行处理。由于副本很大,我宁愿直接使用原始文件。有什么办法吗? 普通的FileStream不允许任何共享访问模式。我可以控制这两个程序,所以如果有必要,我也可以更改编写器。

2 个答案:

答案 0 :(得分:4)

您需要确保执行写入和读取的程序具有正确的FileShare设置,因此您需要将FileShare.Read传递给FileStream构造函数以进行程序编写:

new FileStream("C:/Users/phil/tmp.txt",FileMode.Create,FileAccess.Write,FileShare.Read)

您还需要确保为刚读取它的程序启用了FileShare.ReadWrite:

new FileStream("C:/Users/phil/tmp.txt",FileMode.Open,FileAccess.Read,FileShare.ReadWrite)

这将导致FileStream构造函数在文件本身上放置正确的锁。

您可以在msdn上找到有关构造函数的更多信息:http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx(还有其他重载也采用FileShare参数)

答案 1 :(得分:0)

您可以使用我的库访问多个应用程序中的文件。

您可以从nuget安装它:Install-Package Xabe.FileLock

如果您想了解更多相关信息,请查看 https://github.com/tomaszzmuda/Xabe.FileLock

ILock fileLock = new FileLock(file);
if(fileLock.Acquire(TimeSpan.FromSeconds(15), true))
{
    using(fileLock)
    {
        // file operations here
    }
}
仅当可以锁定此对象的独占文件时,

fileLock.Acquire方法才会返回true。 但是上传文件的app也必须在文件锁中做。 如果对象不可访问,则metod返回false。

因此,如果你想使用它,你必须在更改数据之前安装app和lock文件的这个包,然后立即释放锁。