C# - 从 FTP 下载具有更高上次修改日期的文件
C# - Download files from FTP which have higher last-modified date
我有一个带有一些文件的 FTP 服务器。我在本地目录中有相同的文件(在 C:\
)。
当我 运行 程序时,我希望它搜索 FTP 服务器中的所有文件,这些文件的最后修改时间戳晚于同一文件(同名)本地目录并下载创建的所有文件。
有人可以给我帮助或提示吗?我会感谢所有答案!
列出所有文件:
https://msdn.microsoft.com/en-us/library/ms229716(v=vs.110).aspx
阅读日期:
https://msdn.microsoft.com/en-us/library/system.net.ftpwebresponse.lastmodified(v=vs.110).aspx
不幸的是,没有真正可靠和有效的方法来使用 .NET 框架提供的功能检索时间戳,因为它不支持 FTP MLSD
命令。 MLSD
命令以标准化的机器可读格式提供远程目录列表。命令和格式由 RFC 3659.
标准化
.NET Framework 支持的替代方案:
ListDirectoryDetails
method(FTPLIST
命令)检索目录下所有文件的详细信息然后你处理FTP服务器具体格式详解(*nix格式类似于ls
*nix命令是最常见的,缺点是格式可能会随时间变化,至于较新的文件使用“May 8 17:48”格式对于旧文件,使用“2009 年 10 月 18 日”格式。
示例:
DOS/Windows格式:C# class to parse WebRequestMethods.Ftp.ListDirectoryDetails FTP response
*nix 格式:Parsing FtpWebRequest ListDirectoryDetails line
GetDateTimestamp
method (an FTP MDTM
command) to individually retrieve timestamps for each file. An advantage is that the response is standardized by the 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.ListDirectory
or the Session.EnumerateRemoteFiles
methods and read the 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的作者)
我有一个带有一些文件的 FTP 服务器。我在本地目录中有相同的文件(在 C:\
)。
当我 运行 程序时,我希望它搜索 FTP 服务器中的所有文件,这些文件的最后修改时间戳晚于同一文件(同名)本地目录并下载创建的所有文件。
有人可以给我帮助或提示吗?我会感谢所有答案!
列出所有文件:
https://msdn.microsoft.com/en-us/library/ms229716(v=vs.110).aspx
阅读日期:
https://msdn.microsoft.com/en-us/library/system.net.ftpwebresponse.lastmodified(v=vs.110).aspx
不幸的是,没有真正可靠和有效的方法来使用 .NET 框架提供的功能检索时间戳,因为它不支持 FTP MLSD
命令。 MLSD
命令以标准化的机器可读格式提供远程目录列表。命令和格式由 RFC 3659.
.NET Framework 支持的替代方案:
ListDirectoryDetails
method(FTPLIST
命令)检索目录下所有文件的详细信息然后你处理FTP服务器具体格式详解(*nix格式类似于ls
*nix命令是最常见的,缺点是格式可能会随时间变化,至于较新的文件使用“May 8 17:48”格式对于旧文件,使用“2009 年 10 月 18 日”格式。示例:
DOS/Windows格式:C# class to parse WebRequestMethods.Ftp.ListDirectoryDetails FTP response
*nix 格式:Parsing FtpWebRequest ListDirectoryDetails lineGetDateTimestamp
method (an FTPMDTM
command) to individually retrieve timestamps for each file. An advantage is that the response is standardized by the 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.ListDirectory
or the Session.EnumerateRemoteFiles
methods and read the 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的作者)