我有很多进程读取存储在网络共享上的文件。最初我只能有一个进程读取文件,其他所有人都会抛出异常。我执行下面的代码来处理是:有多个进程读取同一文件的正确方法?
using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
content = fileStreamReader.ReadToEnd();
}
这让多个进程读取同一个文件,但它似乎仍然有问题,因为有时候多个进程仍然无法访问该文件。然而,我可以稍后再回来,当文件没有被使用,并打开它就好了。现在我有一些重试行为,实施了迄今为止的随机延迟,似乎有所帮助。这样做对我来说似乎有点古怪,那么更好的方法是什么?
这是奇怪的部分,我得到的异常根本不是来自文件IO,而是来自名为CommStudio的库。总之,我将文件转储到一个字符串,我稍微修改它,将其转储到内存流中,然后通过rs232上的ymodem将其发送出去。例外是告诉我远程系统已经取消。获取数据的设备报告存在传输错误,这通常意味着收到了不完整/空文件。
通常我会责怪图书馆这个,但它在桌面测试和当只有一个进程访问文件时完美地工作。唯一真正似乎一致的是,当多个进程访问文件时,它很可能会失败。
锁定网络共享可以是皮塔饼。你能告诉你正在使用哪些网络共享(windows版本,unix?)以及你得到了什么异常? – stmax 2010-02-25 23:24:55
客户端使用的是XP,服务器是Windows Server,我认为是2008,但并不完全确定。我发布了关于异常的编辑。 – MGSoto 2010-02-25 23:30:56
你总是阅读相同的文件吗?您可以尝试在读取文件后检查是否正确读取校验和(请参见类SHA1)。如果校验和正确,则知道错误来自设备,而不是从网络共享中读取。 – stmax 2010-02-25 23:49:45