我想通过 c# 访问一个文件,该文件是通过不同的程序创建和处理的。
目前我正在通过 Windows 资源管理器将文件复制到不同的位置,然后使用该副本。由于副本很大,我更愿意直接使用原始文件。有什么办法吗?
普通的 FileStream 不允许任何共享访问模式。我可以控制这两个程序,所以如果有必要我也可以更改作者。
1913 次
2 回答
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 参数)
于 2011-07-13T12:05:57.643 回答
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。但是上传文件的应用程序也必须在文件锁定中进行。如果对象不可访问,则方法返回 false。
所以如果你想使用它,你必须先安装这个应用程序和锁文件的包,然后再更改其中的数据,然后立即释放锁。
于 2017-09-07T10:58:58.690 回答