gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:49:25 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

.NET 框架支持的替代方案:

  • ListDirectoryDetails method (FTP LIST 命令)检索目录中所有文件的详细信息,然后处理 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 3659 标准化到 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);

或者,您可以使用支持现代 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 的作者)

关于C# - 从 FTP 下载具有更高上次修改日期的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38073302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com