[英]Downloading oldest file from Linux FTP server and Windows FTP server
我想从FTP服务器上的目录下载最早的文件。
我正在使用FtpWebrequest
连接到FTP服务器以获取目录中的文件列表。 我使用WebRequestMethods.Ftp.ListDirectoryDetails
来做到这一点。 知道文件名后,我将创建另一个FTP连接来下载该文件。
但是,当FTP在Linux上和Windows上时,我在FtpWebResponse
流中获得的详细信息采用不同的格式。
FTP服务器发送响应的格式/模式取决于服务器的创建/编码方式。 因此,从一台Linux / Windows服务器到另一台Linux / Windows服务器, ListDirectoryDetails
响应流的ListDirectoryDetails
将有所不同。
从各种渠道得知,Linux FTP可以响应ListDirectoryDetails
约400种格式。
因此,您不能依赖或假设任何一种模式。
有两种解决方案:
首先使用ListDirectory命令。 它会为您提供目录的内容(目录记录)。 然后对于每个内容/目录记录,使用GetDateTimestamp 。 它会为您提供所有文件的日期时间戳,然后您可以确定哪个是最早的文件。 但是该解决方案效率不高,因为您必须为每个文件发出FtpWebRequest
才能知道Datetimestamp。 (如果有“ n”个文件,则为n + 1个通话。)
另一种解决方案是仅使用ListDirectoryDetails 。 这不能以编程方式解决整个问题。
您可以假设最常用的响应模式并针对它进行编码。 您可以在《用户指南》或《配置指南》等文档中记录此假设。 当然,它将解决方案限制为Windows和Linux只能使用一种模式,但这应该是可以接受的。 (至少在我看来是可以接受的)。 我认为,针对最常见的模式进行编码是合理的,而不是编写试图处理所有可能模式的庞大笨拙的代码(当您不确定是否可以再有一个模式时,也是如此!)。
您可以使用正则表达式来匹配响应模式,如果不匹配,则可以采取适当的操作,例如引发一些异常等。另一个好处是,只需调用1次,您就可以获取'n'个文件的日期时间戳(比较针对解决方案#1)。 而且,确定.NET代码中最旧的日期时间戳比调用n + 1次FTP服务器肯定会更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.