【发布时间】:2012-09-14 21:41:25
【问题描述】:
我有一个使用FileSystemWatcher 类监视目录更改的程序。我有一些其他客户使用StreamWriter 写入此目录。 “有时”,在 filesystemwatcher created 事件中,当我尝试访问文件时,出现错误。
这很难调试,因为它不会经常发生。客户端通过将流包含在 Using 块中来正确关闭流。错误出现在“此应用程序无法使用该文件,因为它正在被另一个进程使用”的行上。我不太明白这一点,当客户端使用相同的代码将文件写入目录时,为什么错误只会偶尔出现。有时,手动复制在大多数情况下都会引发错误。
有问题的目录不是网络目录,而是本地目录。请提出建议。
客户代码
using (StreamWriter ss = new StreamWriter(input)) {
ss.WriteLine(args(0));
ss.Close();
}
监控应用程序事件代码
public void Temp()
{
FileSystemWatcher fs = new FileSystemWatcher();
fs.Path = GlobalStatics.PathWorkOrders;
fs.IncludeSubdirectories = false;
fs.Filter = "*.wo";
fs.EnableRaisingEvents = true;
fs.Created += CreatedEvent;
}
public void CreatedEvent(object sender, System.IO.FileSystemEventArgs e)
{
string guidStr = Path.GetFileNameWithoutExtension(e.FullPath);
using (StreamReader sr = new StreamReader(e.FullPath))
{
//Processing
sr.Close();
}
}
【问题讨论】:
-
您能否显示您正在使用的代码,如果这是在 for 循环中完成的,您可能需要创建一个 StreamWriter 的实例,但如果没有看到您的代码就无法判断..
-
这是不可避免的。您将等待一段时间再试一次。
-
在 StreamReader 对象创建之前尝试使用 Thread.sleep(1000)!
标签: c# .net vb.net filesystemwatcher streamwriter