首页 文章

FileStream包含锁定文件

提问于
浏览
15

我想知道是否可以将readonly FileStream转换为锁定文件?我现在尝试读取锁定文件时出现异常 .

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

谢谢!

4 回答

  • -1

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

    这个看起来像一个赌注:

    FileStream Constructor (String, FileMode, FileAccess, FileShare)
    

    MSDN Link

    FileAccess

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

    FileShare

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

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

    这将使用FileShare参数FileShare.Read的默认值 . 这会拒绝任何写入文件的过程 . 如果另一个进程正在写入文件,那么这是行不通的,你不能否认已经获得的权利 .

    您必须指定FileShare.ReadWrite . 如果其他进程使用FileShare.None,那可能仍然无效,没有解决方法 . 请注意,获取正在写入的文件的读取权限很麻烦,您没有可靠的文件结束指示 . 文件中的最后一条记录或行可能只是部分写入 .

  • 28

    我已经使用了以下工作,但是应该谨慎使用,因为文件可以在您通过另一个进程打开时进行修改 .

    FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
    
  • 1

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

相关问题