FileStream包含锁定文件

我想知道是否有可能将readonly FileStream变为锁定文件? 我现在尝试读取锁定的文件时出现exception。

using (FileStream stream = new FileStream("path", FileMode.Open)) 

谢谢!

你应该尝试另一个构造函数。 它们记录在MSDN上。

这个看起来像一个赌注:

 FileStream Constructor (String, FileMode, FileAccess, FileShare) 

MSDN链接

的FileAccess

一个常量,用于确定FileStream对象如何访问该文件。 这将获取FileStream对象的CanRead和CanWrite属性。 如果path指定磁盘文件,则CanSeek为true。

文件共享

一个常量,用于确定进程如何共享文件。

 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,或使用命令行选项解锁。 它们都可以解锁文件,您可以轻松地从程序中执行它们,而无需离开程序。 (但不要将它们用于Windows SAM文件,它不适用于SAM;)祝你好运!