.NET WinSCP,只下载新文件

时间:2017-10-17 13:36:11

标签: c# .net ftp winscp winscp-net

我创造了一个应该每晚运行一次的程序。它的作用是从FTP下载图像,压缩它们并将它们上传回FTP。我使用WinSCP下载和上传文件。

现在我应用了一个文件掩码,确保只下载图像,排除子目录,最重要的是只下载过去24小时内修改过的文件。此文件掩码的代码段:

DateTime currentDate = DateTime.Now;
string date = currentDate.AddHours(-24).ToString("yyyy-MM-dd");

transferOptions.FileMask = "*.jpg>=" + date + "; *.png>=" + date + "|*/";

事实上,正如我即将发布的那样,我意识到,如果我每晚运行一次,并检查文件是否在过去24小时内被修改,它将继续下载并压缩相同的文件,因为修改后的时间戳会随着每次压缩而不断增加。

要解决此问题,我需要编辑FileMask以仅下载新文件,即上次运行程序时文件夹中没有的文件。我不知道你是否可以用某种方式检查创建时间戳,或者我是否必须进行一些比较。我一直在查看文档,但我还没有找到解决我的具体用例的方法。

WinSCP中是否有人能够指出我正确的方向?

2 个答案:

答案 0 :(得分:0)

看起来WinSCP无法访问文件的创建日期。

除非你能做些什么来使这些文件变得与众不同。当您重新上传它们(例如将它们放在不同的文件夹中)时,您最好的选择可能是:

  • 忘记使用FileMask
  • 使用WinSCP方法EnumerateRemoteFiles获取文件列表
  • 自己循环播放(它是RemoteFileInfo个对象
  • 的集合
  • 您可能需要保留已经处理过的文件列表'某处并与该清单进行比较
  • 针对您真正想要的特定文件调用GetFiles

答案 1 :(得分:0)

How do I transfer new/modified files only?

上有一篇关于WinSCP网站的文章

总结文章:

  • 如果您在本地保留过去的文件,只需运行同步以仅下载修改后的/新文件。

    然后迭代Session.SynchronizeDirectories返回的列表,找出新文件的内容。

  • 否则您必须使用时间阈值。只需记住上次运行应用程序并使用包含时间的时间约束,而不仅仅是日期。

    string date = lastRun.ToString("yyyy-MM-dd HH:mm:ss");
    transferOptions.FileMask = "*.jpg>=" + date + "; *.png>=" + date + "|*/";