我创造了一个应该每晚运行一次的程序。它的作用是从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中是否有人能够指出我正确的方向?
答案 0 :(得分:0)
看起来WinSCP无法访问文件的创建日期。
除非你能做些什么来使这些文件变得与众不同。当您重新上传它们(例如将它们放在不同的文件夹中)时,您最好的选择可能是:
答案 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 + "|*/";