我正在寻找替代 Restart Manager 的方法来检查文件是否被锁定。我在这个相同问题的 这个回答 中找到了一些线索。然而,该回答包含以下评论,我无法理解:“如果文件没有写入或读取锁定,则此解决方案无效,即已经使用 FileShare.Read 或 FileShare.Write 访问模式(用于读取或写入)打开它。”
我使用以下代码进行测试(为简洁起见省略了 using 块和 Close()):
这将始终显示“文件是否锁定?True”,而根据评论应该显示“False”。
我还测试了这个答案的代码,它有一个类似的评论,但没有成功。我也尝试了两个独立进程的测试-如预期的那样没有区别。
查看文档后,我的测试结果似乎是合理的,但我对上述提到的评论感到困惑。
否则,我怎样才能打开一个文件(例如进行读取),而不会创建锁定呢?
我使用以下代码进行测试(为简洁起见省略了 using 块和 Close()):
static void Main(string[] args)
{
const string fileName = "test.txt";
// This should open the file as described, shouldn't it?
var fi1 = new FileInfo(fileName);
// Test with FileShare.Read / FileShare.Write / FileShare.ReadWrite gives the same result
var fs1 = fi1.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write);
var fi2 = new FileInfo(fileName);
Console.WriteLine($"Is file locked? {IsFileLocked(fi2)}");
// Displays always: "Is file locked? True"
Console.ReadLine();
}
这将始终显示“文件是否锁定?True”,而根据评论应该显示“False”。
我还测试了这个答案的代码,它有一个类似的评论,但没有成功。我也尝试了两个独立进程的测试-如预期的那样没有区别。
查看文档后,我的测试结果似乎是合理的,但我对上述提到的评论感到困惑。
否则,我怎样才能打开一个文件(例如进行读取),而不会创建锁定呢?
FileAccess.ReadWrite
和只读文件的问题。 - Collin Dauphinee