我有一个带有一些文件的FTP服务器。我在本地目录中有相同的文件(在C:\
)。
当我运行该程序时,我希望它搜索FTP服务器中的所有文件,这些文件的最后修改时间戳晚于本地目录中的同一文件(同名),并下载所有已建立的文件。
有人可以给我一个帮助或提示吗?我会感激所有答案!
答案 0 :(得分:5)
不幸的是,由于它不支持FTP MLSD
命令,因此没有真正可靠有效的方法来使用.NET框架提供的功能检索时间戳。 MLSD
命令以标准化的机器可读格式提供远程目录的列表。命令和格式由RFC 3659标准化。
.NET框架支持的替代方案:
ListDirectoryDetails
method(FTP LIST
命令)检索目录中所有文件的详细信息,然后处理FTP服务器特定格式的详细信息(* nix格式类似于{ {1}} * nix命令是最常见的,缺点是格式可能会随着时间而改变,对于较新的文件" 5月8日17:48"格式用于旧文件" 10月使用了2009年和#34;格式。
示例:
DOS / Windows格式:C# class to parse WebRequestMethods.Ftp.ListDirectoryDetails FTP response
* nix格式:Parsing FtpWebRequest ListDirectoryDetails line
GetDateTimestamp
method(FTP ls
命令)单独检索每个文件的时间戳。一个优点是响应由RFC 3659到MDTM
标准化。缺点是你必须为每个文件发送一个单独的请求,这可能是非常低效的。
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);
命令的第三方FTP客户端实现。
例如WinSCP .NET assembly支持。
您可以使用Session.ListDirectory
或Session.EnumerateRemoteFiles
方法阅读返回集合中的RemoteFileInfo.LastWriteTime
文件。
或者更简单,您可以使用Session.SynchronizeDirectories
让库自动下载(同步)修改后的文件:
MLSD
WinSCP GUI can generate a code template为你。
(我是WinSCP的作者)
答案 1 :(得分:1)