我想通过 C# 访问一个文件,该文件是通过其他程序创建并仍在处理的。
目前我正在通过 Windows 资源管理器将文件复制到不同的位置,然后使用副本进行工作。由于副本很大,我更愿意直接使用原始文件。有什么办法吗?
普通的 FileStream 不允许任何共享访问模式。我可以控制这两个程序,因此如果需要,我也可以更改编写器。
最佳答案
您需要确保进行写入和读取的程序设置了正确的 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 参数)
关于C# 访问锁定的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6678381/