【问题标题】:"Parameter is incorrect" when moving file with Windows Service使用 Windows 服务移动文件时出现“参数不正确”
【发布时间】: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


    【解决方案1】:

    我要回答的第一个问题是,失败时这些值是什么:

    • e.FullPath
    • 目标目录
    • 文件名

    机会是其中一种价值不是你所期望的

    【讨论】:

    • 我们验证了路径是正确的,并且在失败和成功之间没有任何变化。 (我让其他人查看文件路径以确保它们是正确的。)
    【解决方案2】:

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

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

    因此,可能是某处的某些网络设置导致了问题。抱歉,我不能更具体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多