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