o 读取锁定的文件,您需要为 FileStream 提供更多标志。
代码如下。
using (var reader = new FileStream("d:\\test.txt", FileMode.Open, FileAccess.Read,FileShare.ReadWrite))
{
            using (var binary = new BinaryReader(reader))
            {
                //todo: add your code
                binary.Close();
            }
            reader.Close();
}
这将使用读写共享模式打开文件以进行只读。这可以用一个小应用程序进行测试。(使用 streamreader\write 而不是二进制)
    static Thread writer,
                  reader;
    static bool abort = false;
    static void Main(string[] args)
    {
        var fs = File.Create("D:\\test.txt");
        fs.Dispose();
        writer = new Thread(new ThreadStart(testWriteLoop));
        reader = new Thread(new ThreadStart(testReadLoop));
        writer.Start();
        reader.Start();
        Console.ReadKey();
        abort = true;
    }
    static void testWriteLoop()
    {
        using (FileStream fs = new FileStream("d:\\test.txt", FileMode.Open, FileAccess.Write, FileShare.Read))
        {
            using (var writer = new StreamWriter(fs))
            {
                while (!abort)
                {
                    writer.WriteLine(DateTime.Now.ToString());
                    writer.Flush();
                    Thread.Sleep(1000);
                }
            }
        }
    }
    static void testReadLoop()
    {
        while (!abort)
        {
            Thread.Sleep(1000);
            using (var reader = new FileStream("d:\\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                using (var stream = new StreamReader(reader))
                {
                    Console.WriteLine(stream.ReadToEnd());
                    stream.Close();
                }
                reader.Close();
            }
        }
    }
我意识到上面的例子非常简单,但事实仍然是“testWriteLoop”永远不会释放锁。
希望这可以帮助