我想知道是否可以将只读 FileStream 获取到锁定文件?现在,当我尝试读取锁定的文件时出现异常。
using (FileStream stream = new FileStream("path", FileMode.Open))
谢谢!
我想知道是否可以将只读 FileStream 获取到锁定文件?现在,当我尝试读取锁定的文件时出现异常。
using (FileStream stream = new FileStream("path", FileMode.Open))
谢谢!
您应该尝试另一个构造函数。它们记录在 MSDN 中。
这个看起来像一个赌注:
FileStream Constructor (String, FileMode, FileAccess, FileShare)
文件访问
确定 FileStream 对象如何访问文件的常量。这将获取 FileStream 对象的 CanRead 和 CanWrite 属性。如果 path 指定磁盘文件,则 CanSeek 为真。
文件共享
确定进程如何共享文件的常量。
using (FileStream stream = new FileStream("path", FileMode.Open))
这将使用 FileShare 参数的默认值 FileShare.Read。它拒绝任何进程写入文件。如果另一个进程正在写入文件,那将无法正常工作,您不能否认已经获得的权利。
您必须指定 FileShare.ReadWrite。如果其他进程使用 FileShare.None,这可能仍然不起作用,没有解决方法。请注意,对正在写入的文件进行读取访问很麻烦,因为您没有可靠的文件结束指示。文件中的最后一条记录或行可能只被部分写入。
我使用了以下有效的方法,但是应该谨慎使用,因为文件可以在被另一个进程打开时被修改。
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
您可以简单地解锁文件并在其后读取文件。只需使用 Sysinternals 中的 Handle.exe 或带有命令行选项的 Unlocker。它们都可以解锁文件,您可以轻松地从程序中执行它们,而无需离开程序。(但不要将它们用于 Windows SAM 文件,它不适用于 SAM ;))祝你好运!