c# - .NET WinSCP,只下载新文件

标签 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 以仅下载新文件,即上次运行程序时不在文件夹中的文件。我不知道您是否可以通过某种方式检查 Created By-timestamp,或者我是否必须进行一些比较。我一直在查看文档,但没有找到针对我的特定用例的任何解决方案。

是否有 WinSCP 经验丰富的人可以为我指明正确的方向?

最佳答案

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

除非您可以在重新上传文件时采取一些措施使文件“不同”(例如,将它们放在不同的文件夹中),否则您最好的选择可能是:

  • 忘记使用 FileMask
  • 使用 WinSCP 方法 EnumerateRemoteFiles获取文件列表
  • 自己循环遍历它们(它是 RemoteFileInfo 对象的集合
  • 您可能需要在某处保留“已处理文件”列表并与该列表进行比较
  • 调用GetFiles对于您真正想要的特定文件

关于c# - .NET WinSCP,只下载新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791537/

相关文章:

C# 在使用 SSH Ftp 时出现 "DER length is ' 9 5' and cannot be more than 4 bytes"错误

c# - 如何将数据库中的数据随机添加到按钮的文本属性

.net - Linux .Net 托管上的 IBM.MQ MQQueueManager 期间安全握手失败

c# - 一路async await async

azure - Azure 上的虚拟机 - 被动 FTP 不起作用

javascript - 使用 jsftp 上传文件会导致服务器上的文件大小为零

c# - 如何在不进行单元测试的情况下运行 .NET 方法?

c# - 等待和异步用法

c# - 使用 DesignMode 属性与 LicenseManager.UsageMode

.net - Firebird .NET 提供程序 5.0.0 和 EF6