C# - 从 FTP 下载上次修改日期较高的文件

2023-11-30

我有一个包含一些文件的 FTP 服务器。我在本地目录中有相同的文件(在C:\).

当我运行该程序时,我希望它搜索 FTP 服务器中上次修改时间戳晚于本地目录中相同文件(同名)的所有文件,并下载找到的所有文件。

有人可以给我帮助或提示吗?我会感谢所有的答案!


不幸的是,没有真正可靠且有效的方法来使用 .NET 框架提供的功能来检索时间戳,因为它不支持 FTPMLSD命令。这MLSD命令以标准化机器可读格式提供远程目录列表。命令和格式由RFC 3659.

您可以使用 .NET 框架支持的替代方案:

  • the ListDirectoryDetails method(FTPLIST命令)检索目录中所有文件的详细信息,然后处理 FTP 服务器特定格式的详细信息(*nix 格式类似于ls*nix 命令是最常见的,缺点是格式可能会随着时间的推移而改变,对于较新的文件,使用“May 8 17:48”格式,对于较旧的文件,使用“Oct 18 2009”格式。

    例子:
    DOS/Windows 格式:用于解析 WebRequestMethods.Ftp.ListDirectoryDe​​tails FTP 响应的 C# 类
    *nix格式:解析 FtpWebRequest ListDirectoryDe​​tails 行

  • the GetDateTimestamp method(FTPMDTM命令)来单独检索每个文件的时间戳。一个优点是响应是由RFC 3659 to YYYYMMDDHHMMSS[.sss]。缺点是您必须为每个文件发送单独的请求,这可能非常低效。

    const string uri = "ftp://example.com/remote/path/file.txt";
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
    request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    Console.WriteLine("{0} {1}", uri, response.LastModified);
    

或者,您可以使用支持现代的第 3 方 FTP 客户端实现MLSD命令。

例如WinSCP .NET 程序集支持这一点。

您可以使用Session.ListDirectory or the Session.EnumerateRemoteFiles方法并阅读RemoteFileInfo.LastWriteTime返回集合中的文件的数量。

或者更简单,您可以使用Session.SynchronizeDirectories让库自动下载(同步)修改后的文件:

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "ftp.example.com",
    UserName = "user",
    Password = "mypassword",
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Synchronize files
    var localPath = @"d:\www";
    var remotePath = "/home/martin/public_html";
    session.SynchronizeDirectories(
        SynchronizationMode.Local, localPath, remotePath, false).Check();
}

WinSCP GUI可以生成代码模板为你。

(我是WinSCP的作者)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 从 FTP 下载上次修改日期较高的文件 的相关文章

随机推荐

  • 快速屏蔽圆段

    I m creating a simple player app There is a circle that shows a progress of playing a song 在 Swift 中绘制这个圆圈并制作蒙版的最佳方法是什么
  • 获取当前类的typedef

    我目前正在将 boost intrusive ptr 与我的 GUI 类一起使用 虽然这或多或少是一个方便的问题 但是否有正确的方法来获取当前类的类型名 我问的原因是我有一个用于定义不同指针类型的宏 define INTRUSIVE PTR
  • Python - 从 Selenium 中 ::before 伪元素上的 CSS 属性“content”获取文本?

    我正在尝试抓取一些元素并返回网页上显示的文本 我相信我可以通过 css selectors 和 xpaths 很好地找到元素 但我无法返回所需的文本 下面是我的程序 from selenium import webdriver from s
  • 使用 LoginButton 监听 Facebook 注销。 (4.1)

    我一直在阅读 但尚未找到解决方案 所以就这样吧 我正在尝试升级到 Facebook 的新 SDK 4 1 Android SDK 我可以使用以下代码使用 Facebook 的 LoginButton 成功登录用户 facebookLogin
  • pip install 中的方括号是什么意思?

    我看到越来越多的命令是这样的 pip install splinter django 这些方括号有什么作用 您使用的语法是 pip install project extra 就你而言 你是installing the splinter软件
  • Go SQL 驱动程序获取接口{}列值

    我正在尝试使用 go sql 驱动程序从数据库表中读取数据 并将这些值转换为 map string interface 列名是映射的键 值是interface 我将所有列添加到一个数组中 我正在使用 RawBytes 的代码示例 位于htt
  • 从 WiFi 传感器读取 RSSI

    请帮助我如何用 Java 编写代码来读取 WiFi 传感器的接收信号强度指示器 我尝试使用套接字编程来做到这一点 但我所有的尝试都没有得到我想要的 现在我正在查看 J2me 我可能会得到很好的答案 但我发现我可能需要一些建议 谢谢 您使用的
  • 为什么这个 GLUT 程序无法编译?我缺少库或标头吗?

    我刚刚开始使用 Linux Mint 11 最近我决定将 OpenGL 编程作为一种爱好 我发现代码和技术相对简单 但是 我很难尝试将所有资源放在正确的位置 代码是 include
  • 内容解析器notifyChange()不工作

    我已经设置了一个片段来使用 CursorLoader 从自定义内容提供程序中提取数据 问题是 当我使用内容解析器更新 SQLite 表中的记录时 光标不会刷新 即getContext getContentResolver notifyCha
  • Java Swing (BoxLayout) 对齐问题

    我对 Java Swing 非常陌生 在获得良好的布局方面遇到了很多问题 我已经查看了谷歌 甚至该网站上的其他答案 但我发现没有任何信息似乎可以解决该问题 这是我努力的结果 正如您所看到的 标签 文本字段和按钮都没有对齐 我的目标是让它们都
  • 是否有任何有效的理由忽略捕获的异常

    哇 我刚刚从外包开发人员那里拿回了一个巨大的 C 项目 在进行代码审查时 我的分析工具揭示了很多它认为不好的东西 更令人沮丧的消息之一是 Exceptions DontSwallowErrorsCatchingNonspecificExce
  • 调整 selecInput 使其同时适用于两种不同的方法

    我使用两种多标准方法来查找用于生成地图的簇号 方法有VIKOR and TOPSIS 对于每种方法 我需要知道标准的目标是什么 即是否最大化 max 或最小化 min 我有两个标准 所以我创建了两个selectInput供用户选择是否愿意m
  • 需要帮助使用 Bash 和 sed 着色/替换任意字符串

    我正在使用基于此处使用的技术的 bash 脚本 在 bash 中获取颜色输出为我的构建和其他脚本的输出着色 使内容更易于阅读 我的构建中的一个步骤执行 git pull 并且 git 服务器在一堆其他输出中吐出一个像这样的 欢迎 字符串 W
  • 使用Python或graphviz绘制鱼骨图

    我正在尝试用Python生成鱼骨图 因果图或石川图 有没有办法让它更像标准的鱼骨图 from graphviz import Digraph A HW Root SW Root Electric HW ink HW windows SW D
  • Quartus Prime 中的“多个常量驱动程序”Verilog 错误

    我正在致力于用 Verilog 设计一个有限状态机来表示堆栈 该模块如下 module state machine s Enable Clock Resetn c OF Err UF Err input 2 0 s input Enable
  • 具有表达式的属性中使用的可空 DateTime 返回意外的默认值

    我有以下两个方法扩展 public static class DateTimeConverter public static DateTime Convert this DateTime time gt time null new Date
  • Java中激活其他进程的窗口

    我有两个 Java swing 应用程序 意味着在两个 JVM 中运行 有什么办法可以在它们之间切换吗 通过 Java 代码激活另一个应用程序的窗口 您可以尝试使用JNA 我将使用 Maven 为您提供一些适用于 Windows 的代码 或
  • 在 MySQL 中存储 PDF 文件

    如何将 PDF 文档存储在 MySQL 的字段中 目前 我有一个客户列表 每个客户都有一个包含其帐户信息的证书 他们可以将其提供给其他公司以证明他们是我们的客户 目前 他们的证书以 PDF 格式导出并通过电子邮件发送给工作人员 客户也会收到
  • 导航组件 popUpTo bug

    最近我遇到了我询问的问题here 但当我试图弄清楚发生了什么时 我总是偶然发现同样的问题 这就是我所拥有的 我有一个集合 预览 编辑片段 我需要在片段之间进行导航 但是从编辑片段导航到预览片段后 我希望后退按钮将用户带到集合片段而不是编辑片
  • C# - 从 FTP 下载上次修改日期较高的文件

    我有一个包含一些文件的 FTP 服务器 我在本地目录中有相同的文件 在C 当我运行该程序时 我希望它搜索 FTP 服务器中上次修改时间戳晚于本地目录中相同文件 同名 的所有文件 并下载找到的所有文件 有人可以给我帮助或提示吗 我会感谢所有的