使用Windows服务移动文件时“参数不正确”

时间:2011-10-17 20:14:15

标签: c# windows-services filesystemwatcher

我在C#/ VS2008 / .NET3.5中编写了一个Windows服务,它使用FileSystemWatchers监视一些FTP目录,并将文件移到另一个位置进行处理。我今天注意到它在服务启动后很快就会抛出“参数不正确”的错误,但如果我们等待几分钟,文件就会被复制而不会发生意外。我看到错误消息通常与不正确的权限有关,但我验证了目录(目标和源)的权限是正确的,正如我所说的文件移动只在几分钟后工作。

这是在文件完成复制到被监控的FTP目录时调用的代码片段:

//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目录识别文件的来源,然后加载设置以传递给将解析和保存文件的SSIS作业。现在可能有十几个目录被监视,每个目录都有自己的SSIS作业配置设置。是否有可能系统混淆为启动,只需要一些时间来填充所有设置?每个源目录都有自己的FileSystemWatcher。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我要回答的第一个问题是,当它失败时,它们的价值是什么:

  • e.FullPath
  • TARGETDIR
  • 文件名

这些价​​值中的一个可能不是你所期望的

答案 1 :(得分:-1)

我正在标记这个问题,因为问题消失了。我们没有更改代码中的任何内容,但它现在可以在重新启动后立即生效。我们最好的理论是:自从我发布了这个,我正在为移动的办公室工作的客户端,作为迁移的一部分,更新了许多系统和网络策略,并为新环境调整了服务器设置。这些变化中有一个(或多个)可能解决了这个问题。

进一步支持这一理论:在移动之前,我的开发虚拟机无法运行Web浏览器。 (我点击加载浏览器它不起作用,有时它会在任务管理器中短暂出现然后消失。)办公室移动后,这个问题不再出现。

因此可能会出现一些导致问题的网络设置。对不起,我不能更具体。