【发布时间】:2011-10-17 20:14:15
【问题描述】:
我用 C#/VS2008/.NET3.5 编写了一个 Windows 服务,它使用 FileSystemWatchers 监视一些 FTP 目录并将文件移到另一个位置进行处理。我今天注意到,它在服务启动后不久就会抛出错误,指出“参数不正确”,但如果我们等待几分钟,文件就会被复制而不会发生意外。我看到错误消息通常与不正确的权限有关,但我验证了目录(目标和源)的权限是正确的,正如我所说,文件移动在几分钟后就可以工作了。
这是文件复制到被监控的 FTP 目录后调用的代码的 sn-p:
//found the correct source path
string targetDir = dir.TargetDirectory;
string fileName = Path.GetFileName(e.FullPath);
errorlocation = "move file";
string targetFilePath = Path.Combine(targetDir, fileName);
if (File.Exists(targetFilePath))
{
File.Delete(targetFilePath);
}
File.Move(e.FullPath, Path.Combine(targetDir, fileName));
dir 引用和对象,其中包含有关文件被加载到的目录的信息。 e 是 FileSystemEventArgs。 Targetdir 是从 app.config 中的自定义配置块中的目录设置中获取的,该块告诉服务将新文件复制到哪里。
我没有在此处包含代码,但我知道它在 File.Move(上面的最后一行)上失败,因为我为跟踪这些步骤而创建了一些 EventLog 条目。
知道为什么移动在服务启动后很快就失败了,但稍后可以正常工作吗?
该过程的基本概述以防万一:外部供应商每天通过 FTP 向我们传输大量文件。当文件进入时,我的代码根据 FTP 目录识别文件来自谁,然后加载设置以传递给将解析和保存文件的 SSIS 作业。现在可能有十几个目录被监视,每个目录都有自己的 SSIS 作业配置设置。系统是否有可能在启动时感到困惑,只需要一些时间来填充所有设置?每个源目录都有自己的 FileSystemWatcher。
感谢您的帮助。
【问题讨论】:
标签: c# windows-services filesystemwatcher