我创建了一个应该每晚运行一次的程序。它所做的是从我的 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 以仅下载新文件,即上次运行程序时不在文件夹中的文件。我不知道您是否可以通过某种方式检查 Created By-timestamp,或者我是否必须进行一些比较。我一直在查看文档,但没有找到针对我的特定用例的任何解决方案。
是否有 WinSCP 经验丰富的人可以为我指明正确的方向?
最佳答案
看起来 WinSCP 无法访问文件的创建日期。
除非您可以在重新上传文件时采取一些措施使文件“不同”(例如,将它们放在不同的文件夹中),否则您最好的选择可能是:
- 忘记使用 FileMask
- 使用 WinSCP 方法 EnumerateRemoteFiles获取文件列表
- 自己循环遍历它们(它是 RemoteFileInfo 对象的集合
- 您可能需要在某处保留“已处理文件”列表并与该列表进行比较
- 调用GetFiles对于您真正想要的特定文件
关于c# - .NET WinSCP,只下载新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791537/