【问题标题】:C# - Download files from FTP which have higher last-modified dateC# - 从 FTP 下载具有较高上次修改日期的文件
【发布时间】:2016-10-30 14:37:28
【问题描述】:

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

当我将运行该程序时,我希望它搜索 FTP 服务器中的所有文件,这些文件的最后修改时间戳晚于本地目录中的相同文件(同名),并下载所有创建的文件。

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

【问题讨论】:

标签: c# download ftp last-modified


【解决方案1】:

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

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

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

    示例:
    DOS/Windows 格式:C# class to parse WebRequestMethods.Ftp.ListDirectoryDetails FTP response
    *nix 格式:Parsing FtpWebRequest ListDirectoryDetails line

  • GetDateTimestamp method(一个 FTP MDTM 命令)单独检索每个文件的时间戳。一个优点是响应由RFC 3659YYYYMMDDHHMMSS[.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);
    

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

例如WinSCP .NET assembly 支持。

您可以使用Session.ListDirectorySession.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 can generate a code template给你。

(我是 WinSCP 的作者)

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2011-12-14
    • 2017-01-02
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多