我有很多进程正在读取存储在网络共享中的文件。最初我只能让一个进程读取文件,所有其他进程都会抛出异常。我实现了以下代码来处理:
using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
content = fileStreamReader.ReadToEnd();
}
这让多个进程读取同一个文件,但它似乎仍有问题,因为有时多个进程仍然无法访问该文件。然而,我可以稍后在文件未使用时返回并打开它就好了。现在我有一些重试行为,实施了随机延迟,到目前为止似乎有所帮助。这样做对我来说似乎有点古怪,那么什么是更好的方法呢?
这是一个奇怪的部分,我得到的例外根本不是来自文件IO,而是来自一个名为CommStudio的库。简而言之,我将文件转储到一个字符串,我稍微修改它,将其转储到内存流中,并通过rs232上的ymodem发送它。例外是告诉我远程系统已取消。获取数据的设备报告存在传输错误,这通常意味着收到了不完整/空文件。
通常情况下我会责怪这个库,但它在桌面测试中只有一个进程访问该文件时完美无瑕。唯一真正看似一致的是,当多个进程访问文件时,它很可能会失败。
答案 0 :(得分:2)
有一个类似的问题,但没有足够的时间来找到理想的解决方案。我创建了一个web服务并将文件固定在webservice应用程序的本地。然后创建了一个简单的单行GET API,通过office内部网调用..因此确保只有调用应用程序编辑日志文件..杂乱但功能。
答案 1 :(得分:0)
过去我遇到过类似的问题。尝试将您访问文件的方式更改为此类内容。
//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);
}