C# 带有通配符的FTP目录部分列表

C# 带有通配符的FTP目录部分列表,c#,ftp,wildcard,ftpwebrequest,C#,Ftp,Wildcard,Ftpwebrequest,首先我问:。我得到了答案 尽管如此,因为目录中有数十万个FTP对象,所以扫描它可能需要很长时间。然而,我认为有可能检索到所有以“A”开头,然后是“B”等等的对象。。。当它检索目录时,它可以在另一个线程上开始处理它们,而不必等到它获取整个列表 是否可以使用标准的FtpWebRequest使用通配符进行FTP目录列表?对的最新更新明确禁止此操作。来自(我的): 对于本规范中定义的命令,所有路径名都是 被逐字逐句地对待。也就是说,对于作为参数给定的路径名 一个命令,其名称与给定路径名相同的文件是 暗指

首先我问:。我得到了答案

尽管如此,因为目录中有数十万个FTP对象,所以扫描它可能需要很长时间。然而,我认为有可能检索到所有以“A”开头,然后是“B”等等的对象。。。当它检索目录时,它可以在另一个线程上开始处理它们,而不必等到它获取整个列表


是否可以使用标准的
FtpWebRequest
使用通配符进行FTP目录列表?

对的最新更新明确禁止此操作。来自(我的):

对于本规范中定义的命令,所有路径名都是 被逐字逐句地对待。也就是说,对于作为参数给定的路径名 一个命令,其名称与给定路径名相同的文件是 暗指的。路径名中的任何字符都不能被视为特殊或非特殊字符 “魔术”,因此没有模式匹配(除了精确相等) 在给定的路径名和的NVFS中存在的文件之间 允许使用服务器FTP

需要某种模式的客户 匹配功能必须获得相关功能的列表 目录,并实现自己的文件名 选择程序。


也就是说,如果您的服务器支持,您仍然可以使用,但您必须自己处理响应以处理项目列表,因为.NET类无法理解您的服务器特定扩展。

FTP规范指出,文件列表命令的参数(
LIST
NLIST
MLSD
等)是一个路径名。因此无论如何,不应该有通配符

LIST
+
NLIST
):

2.2.术语

pathname

路径名定义为必须为的字符串 用户为识别文件而输入到文件系统。 路径名通常包含设备和/或目录名,以及 文件名规范。FTP尚未指定标准 路径名约定。每个用户必须遵循文件命名规则 传输中涉及的文件系统的约定

5.3.1.FTP命令

列表[]

NLST[]

MLSD
):

2.2.2.通配符

对于本规范中定义的命令,所有路径名都是 按字面意思处理。也就是说,对于作为参数给定的路径名 对于命令,名称与给定路径名相同的文件 暗示。路径名中的任何字符都不能视为 特殊或“神奇”,因此没有模式匹配(精确匹配除外 相等)在给定的路径名和中存在的文件之间 允许服务器FTP的NVFS

7.1.MLSx请求的格式

MLSx命令的语法为:

mlst             = "MLst" [ SP pathname ] CRLF
mlsd             = "MLsD" [ SP pathname ] CRLF

实际上,尽管许多FTP服务器在参数中确实支持通配符,但由于规范不允许这样做,显然没有为支持的通配符设置标准

vsftpd支持
*
{}
列表一起使用。vsftpd不支持现代
MLSD

proftpd支持
*
[]
。但仅限于
列表
。它明确不允许使用带有注释的现代
MLSD的通配符:

RFC3659显式不支持全局字符。因此警告 这样做,但让命令按原样继续

pureftpd支持
*
[]
用于
列表和
MLSD

FileZilla服务器仅对
列表
MLSD
支持
*


但一般来说,您不应该依赖FTP服务器来支持任何通配符

唯一可靠的方法是检索完整的目录列表并在本地筛选文件