ftp提供以下命令来检索有关远程文件的信息:
-
NLST
在特定目录中检索文件名
全部的
服务器)。
-
SIZE
和
MDTM
检索特定文件的大小和修改文件
实际上
所有服务器。
-
LIST
检索目录列表,包括支持的文件属性
全部的
服务器,但是列表没有标准化,因此不能真正实现机器可读。尽管大多数服务器都支持*nix样式的列表(如*nix
ls
命令)。尽管每个人都有自己的怪癖。
-
数字多用表
要检索目录列表,包括机器可读格式的文件属性-此命令最不受支持。它尤其不受*nix vsftpd和Windows IIS的支持。
所以你不必使用
FtpClient.GetFileSize
和
FtpClient.GetModifiedTime
每个文件
. 使用
FtpClient.GetListing
按目录
. 内部使用
MLSD
,如果服务器支持。否则它会回到
表
尝试分析列表。
一些FTP服务器(如proftpd)确实支持非标准专有的
-R
切换到
表
命令,使它们返回所有子文件夹中的列表。Fluenttp也支持这一点(
FtpListOption.Recursive
)但是请注意,Fluenttp使用
-R
具有
表
只有,虽然它更喜欢使用
多层螺旋CT
,如果服务器支持。所以要确保
LIST -R
使用时,您需要同时使用
ftplistopation.recursive
和
FtpListOption.ForceList
.
如果服务器不支持
-R
切换,您必须自己实现递归。或者使用具有API的FTP客户端。
例如,
我的
WinSCP .NET assembly
,您可以使用
Session.EnumerateRemoteFiles
:
IEnumerable<RemoteFileInfo> allFiles =
session.EnumerateRemoteFiles("/", null, EnumerationOptions.AllDirectories);