C# 让多个进程读取同一文件的正确方法?

C# 让多个进程读取同一文件的正确方法?,c#,file,network-share,C#,File,Network Share,我有许多进程读取存储在网络共享上的文件。最初我只能让一个进程读取文件,其他进程都会抛出异常。我实现了以下代码来处理这个问题: using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))) { content = fileStreamReader.ReadToEnd(); } 这允许多个进程读取同一个文件,但它

我有许多进程读取存储在网络共享上的文件。最初我只能让一个进程读取文件,其他进程都会抛出异常。我实现了以下代码来处理这个问题:

using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
   content = fileStreamReader.ReadToEnd();
}
这允许多个进程读取同一个文件,但它似乎仍然存在问题,因为有时多个进程仍然无法访问该文件。但我可以在文件未被使用时返回,然后打开它。现在我已经实现了一些随机延迟的重试行为,到目前为止,这些行为似乎有所帮助。这样做对我来说似乎有点奇怪,那么有什么更好的方法呢

这是奇怪的部分,我得到的异常根本不是来自文件IO,而是来自一个名为CommStudio的库。简言之,我将文件转储到字符串中,对其进行轻微修改,将其转储到内存流中,然后通过rs232上的ymodem将其发送出去。例外情况是远程系统已取消。获取数据的设备报告存在传输错误,这通常意味着接收到的文件不完整/为空


通常我会将此归咎于库,但在桌面测试和只有一个进程访问文件时,它可以完美地工作。看起来唯一一致的是,当多个进程访问一个文件时,它很可能会失败。

也有类似的问题,但没有分配时间来找到理想的解决方案。我创建了一个webservice,并将文件本地粘贴到webservice应用程序。。然后创建了一个简单的一行GET API,该API通过office intranet调用。。因此,确保只有调用应用程序编辑了日志文件。。凌乱但实用。

我过去也有过类似的问题。尝试将文件的访问方式更改为以下内容

//Use FileInfo to get around OS locking of the file
FileInfo fileInfo = new FileInfo(path); 
//I actually wanted unblocked read write access so change your access and share appropriately
using (FileStream fs = fileInfo.Open(FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
{
    //I'm using CopyTo but use whatever method matches your need
    fileInfo.CopyTo(Path.Combine(destination, fileName), false);
}

锁定网络共享可能是一个pita。你能告诉我你使用的是什么网络共享(windows版本,unix?)和什么例外情况吗?客户端使用的是XP,服务器是windows server,我想是2008,但不完全确定。我正在发布一个关于异常的编辑。你总是在阅读相同的文件吗?您可以在读取文件后尝试计算校验和(例如,请参见类SHA1),以检查它们是否被正确读取。如果校验和正确,您就知道错误来自设备,而不是从网络共享读取。我有许多文件可以读取,目前大约50个,但通常传输都是大批量完成的,因为客户往往会订购多个相同的设备,所以他们都需要传输相同的文件。我将研究校验和的概念,甚至可能只是将读取的文本转储到日志中,看看它们是否匹配。有趣的解决方案。我有点喜欢,但我不认为我会为这个解决方案赢得太多选票。然而,它确实给了我一个想法,因为我有一个主程序控制所有进程,并且可能为进程提供它们需要的文件。。。但最终也会有很多这样的解决方案在运行,我更愿意选择一个有保证的解决方案。