我有很多进程读取存储在网络共享上的文件。最初,我只能让一个进程读取该文件,其他所有进程都会抛出异常。我实现了以下代码来解决这个问题:
using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
content = fileStreamReader.ReadToEnd();
}
这个方法可以让多个进程读取同一个文件,但是有时候仍然会出现问题,因为有时候多个进程仍然无法访问文件。不过当文件没有被使用时,我稍后可以轻松打开它。目前,我已经实现了一些带随机延迟的重试行为,这似乎有所帮助。对我来说,这种做法有点古怪,那么有更好的方法吗?
奇怪的是,我得到的异常根本不是来自文件IO,而是来自一个名为CommStudio的库。简而言之,我将文件转储到字符串中,稍微修改一下,将其转储到内存流中,并通过rs232上的ymodem发送出去。异常告诉我远程系统已经取消了操作。接收数据的设备报告发生了传输错误,这通常意味着接收到了不完整/空的文件。
通常我会把责任归咎于库,但是在桌面测试和只有一个进程访问文件时,它运行得非常完美。唯一真正一致的事情似乎是,在多个进程访问文件时容易失败。