【发布时间】:2019-01-13 14:45:58
【问题描述】:
我正在根据 FileWatcher 事件读取网络位置中的文本文件。我有同一个程序的两个实例读取文件,当实例 1 和 2 以完全相同的秒数和毫秒读取文件时,我收到一个异常,说文件正在被另一个进程使用。当实例 1 和 2 之间存在几毫秒的差异时,不会出现此锁定错误。
我尝试过的事情 1.尝试使用FileShare.ReadWrite参数,问题依旧。
试图在实例 1 和 2 之间造成一些延迟,但有时会出现问题。
尝试使用 using 语句来关闭 FileStream 对象,但问题仍然存在。
避免此问题的任何想法/建议。
代码片段
StreamReader sr = null;
FileStream fs = null;
try
{
fs = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
sr = new StreamReader(fs);
while (sr.Peek() != -1)
{
// Does only read operations no write.
}
sr.Close();
fs.Close();
}
catch (Exception Ex)
{
try
{
if (sr != null)
sr.Close();
if (fs != null)
fs.Close();
}
catch (Exception innerException)
{
}
}
【问题讨论】:
-
我建议创建单个路由来读取文件并将内容与文件名一起作为标题放入队列中。然后您可以在该队列上进行并行处理