评论解决:
应用程序崩溃是由另一个问题引起的
我正在从 2 个不同的应用程序读取/写入文件,当文件被读取或写入时,它将始终被应用程序 A 或 B 锁定,并且它们都使用FileShare.None.
我的问题是,即使将阅读器包装在 try/catch 周围,它仍然会在 using 行使用 IOException 使应用程序崩溃(写入器不会发生)。
我也做了catch (IOException ...一些我认为除了让它更具可读性之外没有什么区别的问题。
当文件被锁定并继续尝试直到文件可用时,忽略的正确方法是什么?
while (true)
{
    try
    {
        using (FileStream stream = new FileStream("test_file.dat", FileMode.Open, FileAccess.Read, FileShare.None))
        {
            using (TextReader reader = new StreamReader(stream))
            {
                // bla bla bla does not matter
            }
        }
    }
    catch
    {
        // bla bla bla does not matter again
    }
    Thread.Sleep(500);
}
写
private bool WriteData(string data)
{
    try
    {
        using (FileStream stream = new FileStream("test_file.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
        {
            stream.SetLength(0);
            using (TextWriter writer = new StreamWriter(stream))
            {
                writer.Write(data);
            }
        }
        return true;
    }
    catch
    {
        return false;
    }
}
FileShare.None请注意,当文件被用于读取或写入的任何进程时,我不会向任何人授予共享权限(作者和读者使用),所以基本上我正在处理异常,直到文件可用但无法正常工作。