17

我想知道是否可以将只读 FileStream 获取到锁定文件?现在,当我尝试读取锁定的文件时出现异常。

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

谢谢!

4

4 回答 4

29

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

这个看起来像一个赌注:

FileStream Constructor (String, FileMode, FileAccess, FileShare)

MSDN 链接

文件访问

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

文件共享

确定进程如何共享文件的常量。

于 2011-05-17T18:22:45.380 回答
7
using (FileStream stream = new FileStream("path", FileMode.Open))

这将使用 FileShare 参数的默认值 FileShare.Read。它拒绝任何进程写入文件。如果另一个进程正在写入文件,那将无法正常工作,您不能否认已经获得的权利。

您必须指定 FileShare.ReadWrite。如果其他进程使用 FileShare.None,这可能仍然不起作用,没有解决方法。请注意,对正在写入的文件进行读取访问很麻烦,因为您没有可靠的文件结束指示。文件中的最后一条记录或行可能只被部分写入。

于 2011-05-17T18:56:54.043 回答
3

我使用了以下有效的方法,但是应该谨慎使用,因为文件可以在被另一个进程打开时被修改。

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
于 2016-03-23T22:28:34.567 回答
-3

您可以简单地解锁文件并在其后读取文件。只需使用 Sysinternals 中的 Handle.exe 或带有命令行选项的 Unlocker。它们都可以解锁文件,您可以轻松地从程序中执行它们,而无需离开程序。(但不要将它们用于 Windows SAM 文件,它不适用于 SAM ;))祝你好运!

于 2012-08-17T14:50:05.437 回答