FTP 提供这些命令来检索有关远程文件的信息:
NLST
检索特定目录中的文件名 -所有服务器都支持。
SIZE
并MDTM
检索特定文件的大小和修改文件 -几乎所有服务器都支持。
LIST
检索目录列表,包括文件属性——所有服务器都支持,但列表不是标准化的,因此不是真正的机器可读。尽管大多数服务器将支持 *nix 样式列表(如 *nixls
命令)。虽然每个人都会有它的怪癖。
MLSD
检索目录列表,包括机器可读格式的文件属性 - 最不支持此命令。*nix vsftpd 和 Windows IIS 尤其不支持它。
所以你不必使用FtpClient.GetFileSize
and FtpClient.GetModifiedTime
per file。FtpClient.GetListing
按目录使用。MLSD
如果服务器支持,它在内部使用. 否则它会回退LIST
并尝试解析列表。
一些 FTP 服务器(如 ProFTPD)确实支持对命令进行非标准专有-R
切换,LIST
这将使它们返回所有子文件夹的列表。FluentFTP 也支持 ( FtpListOption.Recursive
)。尽管请注意 FluentFTP 仅使用-R
with LIST
,而MLSD
如果服务器支持它,它更喜欢使用 。因此,为了确保LIST -R
使用,您需要同时使用FtpListOption.Recursive
和FtpListOption.ForceList
。
如果你的服务器不支持-R
开关,你必须自己实现递归。或者使用具有 API 的 FTP 客户端。
例如,对于我的 WinSCP .NET 程序集,您可以使用Session.EnumerateRemoteFiles
:
IEnumerable<RemoteFileInfo> allFiles =
session.EnumerateRemoteFiles("/", null, EnumerationOptions.AllDirectories);