繁体   English   中英

从Linux FTP服务器和Windows FTP服务器下载最早的文件

[英]Downloading oldest file from Linux FTP server and Windows FTP server

我想从FTP服务器上的目录下载最早的文件。

我正在使用FtpWebrequest连接到FTP服务器以获取目录中的文件列表。 我使用WebRequestMethods.Ftp.ListDirectoryDetails来做到这一点。 知道文件名后,我将创建另一个FTP连接来下载该文件。

但是,当FTP在Linux上和Windows上时,我在FtpWebResponse流中获得的详细信息采用不同的格式。

  1. 该如何处理?
  2. 我可以为Linux和Windows编写不同的方法来解析响应流。 但是为此,至少Linux Ftp和Windows FTP提供细节的方式应该是确定的。 您是否知道详细信息的发送方式从一台Linux FTP服务器到另一台Linux FTP服务器会有所不同?
  3. 我观察到(至少在Windows FTP上),每次都在响应流的末尾列出了最早的文件。 文件名位于每一行的末尾。 我可以理所当然地写代码?
  4. 您能否建议更聪明的方法来获取最早的文件详细信息?

FTP服务器发送响应的格式/模式取决于服务器的创建/编码方式。 因此,从一台Linux / Windows服务器到另一台Linux / Windows服务器, ListDirectoryDetails响应流的ListDirectoryDetails将有所不同。

从各种渠道得知,Linux FTP可以响应ListDirectoryDetails约400种格式。

因此,您不能依赖或假设任何一种模式。

有两种解决方案:

  1. 首先使用ListDirectory命令。 它会为您提供目录的内容(目录记录)。 然后对于每个内容/目录记录,使用GetDateTimestamp 它会为您提供所有文件的日期时间戳,然后您可以确定哪个是最早的文件。 但是该解决方案效率不高,因为您必须为每个文件发出FtpWebRequest才能知道Datetimestamp。 (如果有“ n”个文件,则为n + 1个通话。)

  2. 另一种解决方案是仅使用ListDirectoryDe​​tails 这不能以编程方式解决整个问题。

    您可以假设最常用的响应模式并针对它进行编码。 您可以在《用户指南》或《配置指南》等文档中记录此假设。 当然,它将解决方案限制为Windows和Linux只能使用一种模式,但这应该是可以接受的。 (至少在我看来是可以接受的)。 我认为,针对最常见的模式进行编码是合理的,而不是编写试图处理所有可能模式的庞大笨拙的代码(当您不确定是否可以再有一个模式时,也是如此!)。

    您可以使用正则表达式来匹配响应模式,如果不匹配,则可以采取适当的操作,例如引发一些异常等。另一个好处是,只需调用1次,您就可以获取'n'个文件的日期时间戳(比较针对解决方案#1)。 而且,确定.NET代码中最旧的日期时间戳比调用n + 1次FTP服务器肯定会更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM