【问题标题】:How can I tell when a file has been recently overwritten inside an FTP folder?我如何知道最近在 FTP 文件夹中的文件何时被覆盖?
【发布时间】:2009-05-08 14:55:43
【问题描述】:

我正在编写一个 Windows 服务,它需要从本地计算机上的 FTP 文件夹中获取文件并解析该文件中的数据,并将其推送到外部源。该文件将在某个时候从其他方上传到 FTP 文件夹,我无法预测文件何时上传。我需要该服务能够扫描 FTP 文件夹并识别文件最近何时上传到服务器,并开始解析过程。

我需要知道 .NET 中是否有某种方法可以检测文件何时被放入目录。

关于here,SO 中有一个类似的问题,但这与编写 Windows 服务无关。此外,解决方案似乎是监视目录本身,但我使用 DirectoryInfo 类测试了这个想法,并且在查看 LastWriteTime 属性时它不起作用。当我复制和替换目录中的文件时,目录的时间不会改变。

注意:我不能依赖文件上的创建/修改时间戳,因为我不知道对方是如何生成这些文件的。

【问题讨论】:

    标签: c# windows-services directory


    【解决方案1】:

    使用 FileSystemWatcher。这将引发您可以处理的“更改”(甚至我相信是“创建”)事件。在开始使用文件之前,您需要小心确保文件已完全写入,但这应该可以为您指明正确的方向。

    编辑:对于约瑟夫关于如何的问题,这是我在实用程序类中保留的一个静态方法:

    公共静态布尔文件完成(字符串文件路径) { 尝试 { File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); 返回真; } 抓住{返回假; } }

    然后我只是在我实际处理文件之前等待 (!FileComplete(foo)) {}。

    【讨论】:

    • 感谢 AllenG,但我将如何确定文件是否已完全写入?我会从 FileInfo 类中收集这些信息吗?
    • 我这样做的方法是尝试使用 FileSharing.None 打开文件,以查看 ftp 事务是否仍在尝试写入文件。一旦你能够以这种方式打开它,你应该很高兴。可能有更好的方法,但如果是这样,我不知道。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多