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