我想知道是否可以将只读文件流发送到锁定的文件?现在,当我尝试读取锁定的文件时,我会收到异常。
using (FileStream stream = new FileStream("path", FileMode.Open))
谢谢!
你应该尝试另一个构造函数。它们记录在 MSDN 中。
这个看起来像一个赌注:
FileStream Constructor (String, FileMode, FileAccess, FileShare)
MSDN 链接
文件访问
一个常量,它确定文件流对象如何访问文件。这将获取 FileStream 对象的 CanRead 和 CanWrite 属性。如果路径指定了磁盘文件,则 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);
您可以简单地解锁文件并在文件之后读取文件。只需使用句柄.exe 来自 系统内部 ,或使用命令行选项解锁。他们都可以解锁文件,并且您可以轻松地从程序中执行它们,无需离开您的程序。(但不要将它们用于Windows SAM文件,它不适用于SAM ;))祝你好运!