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