C# 访问锁定的文件

标签 c# file filelock

我想通过 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/

相关文章:

c - (struct _IO_FILE *)->_IO_read_base 如何设置?

Windows(可选 Cygwin): Removing file which is locked by another process, 来自命令行

windows - Windows 上的 git (git-bash) 即使完成后也会锁定文件夹数量

C# 可以在不捕获的情况下检查异常吗?

c# - 获取字典元素的值并在 Entity Framework 中的 where 条件中使用

c# - 使用 Caliburn.Micro 附加到多个事件

command-line - 如果给定文件或目录被锁定(由任何进程使用),如何检查命令行?

c# - 确保 IEnumerable 不为空的契约(Contract)

ios - 使用文件内容解析 NSData

c++ - 从文件读入数组 C++