ftp服务命令NLST问题?

longest9 2006-06-05 09:33:37
我使用NLST命令时从服务器上获得文件列表,结果连文件夹也获得了,
是有的服务器获得文件列表,有的还正常.哪位大哥能帮忙解释一下这是为什么?

/// 获得文件列表
/// </summary>
/// <param name="strMask">文件名的匹配字符串</param>
/// <returns></returns>
public string[] Dir(string strMask)
{
// 建立链接
if(!bConnected)
{
Connect();
}
//建立进行数据连接的socket
Socket socketData = CreateDataSocket();
//传送命令
SendCommand("NLST " + strMask);
//分析应答代码
if(!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
{
throw new IOException(strReply.Substring(4));
}
//获得结果
strMsg = "";
while(true)
{
int iBytes = socketData.Receive(buffer, buffer.Length, 0);
strMsg += ASCII.GetString(buffer, 0, iBytes);
if(iBytes < buffer.Length)
{
break;
}
}
char[] seperator = {'\n'};
string[] strsFileList = strMsg.Split(seperator);
socketData.Close();//数据socket关闭时也会有返回码
if(iReplyCode != 226)
{
ReadReply();
if(iReplyCode != 226)
{
throw new IOException(strReply.Substring(4));
}
}
return strsFileList;
}
...全文
2002 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgsw12345 2006-06-06
  • 打赏
  • 举报
回复
搞定了,谢谢!
cgsw12345 2006-06-06
  • 打赏
  • 举报
回复
请问你的Serv-U是哪个版本,我的Serv-U的advanced下面怎么没有那个选项啊。
linaren 2006-06-06
  • 打赏
  • 举报
回复
是Serv-U搭建FTP服务器的话,在'advanced'下有个选项:NLST command also lists directory去掉
cgsw12345 2006-06-06
  • 打赏
  • 举报
回复
to:linaren(JAVA/LINUX...)
请问如何设置啊,急!
linaren 2006-06-05
  • 打赏
  • 举报
回复
这与服务器上的设置有关,服务器可以设置为NLST是否返回目录名
Serv-U 是一种被广泛运用的FTP服务器端软件,支持 9x/ME/NT/2K 等全Windows系列。它设置简单,功能强大,性能稳定。FTP 服务器用户通过它用 FTP协议能在 internet上共享文件。它并不是简单地提供文件的下载,还为用户的系统安全提供了相当全面的保护。例如:您可以为您的FTP 设置密码、设置各种用户级的访问许可等等。Serv-U不仅100%遵从通用FTP标准,也包括众多的独特功能可为每个用户提供文件共享完美解决方案。它可以设定多个FTP 服务器、限定登录用户的权限、登录主目录及空间大小等,功能非常完备。它具有非常完备的安全特性,支持SSl FTP传输,支持在多个Serv-U和FTP客户端通过SSL加密连接保护您的数据安全等。 汉化说明: 1、请先安装原英文软件。 2、退出 FTP Serv-U 应用程序!包括系统栏图标! 3、解压缩后运行汉化包,填入你的安装目录进行汉化。 4、注册方法详见“汉化说明”。 5、有些原英文版用户汉化后可能会导致设置丢失,这可能是由于汉化的资源与英文版不同所致,只能请大家重新设置一下了。以前即用汉化版则无此问题。 6、此汉化无捆绑。 7.0.0.1(2008年4月2日发布) ==================== + 使用内置的 web 客户端,添加了对 HTTP 协议的支持。 + 添加了对 SSH 协议的支持。 + 添加了对使用 HTTP 协议的 FTP Voyager JV 的支持。 + 添加了 THMB 命令,可以将图形文件转换为缩略图然后下载。THMB 命令的作用方式与 RETR 完全一致,只是在传输前文件已按指定的格式被压缩到最大尺寸以内。 + 添加了 HOST 命令,它可以使 FTP 客户端更改到服务器上的特定域。这使得 FTP 服务器可在单个 IP 地址和端口上支持多个域。注意:并非所有的 FTP 客户端都支持该功能。支持这一功能的客户端如 FTP Voyager。 + 添加了 DSIZ 命令,以返回目录内容的大小(包括子目录在内)。可以指定目录,如果留空则使用当前工作目录。 + 添加了 AVBL 命令,以返回目录中可用的字节数。可以指定目录,如果留空则使用当前工作目录。 + 添加了启用/禁用特定 FTP 命令的功能。 + 添加了更改几乎任何 FTP 命令响应的功能。 + 添加了动态 HELP 信息,其中 HELP 发送所有支持的和启用的命令信息。 + 添加了命令级 HELP。例如,"HELP LIST" 将返回有关 LIST 命令的特定帮助信息。 + 当读取客户端正在下载的文件时,添加了使用浮动缓冲区大小的功能。浮动缓冲区大小取决于当前的传输率,这使得传输效率大大提高。 + 添加了目录重命名权限设置。 + 添加了文件重命名权限设置。 + 添加了 "\" 路径概念。"\" 路径类似于 Windows 资源管理器中的 "我的电脑"。当用户的根目录设置为 "\" 时,"/" 列表显示了可用的磁盘驱动器。当在用户、群组、域或服务器级别启用 "允许根('/')为未锁定用户列出驱动器" 时,未登录根目录的用户也可以充分利用该功能。 + 更改了 FEAT 命令,使其仅列出已启用的特殊命令。 + 更改了 "OPTS MLST" 命令,从而对未严格遵守 RFC 的客户端更为宽容。例如,Serv-U 现在既接受 "OPTS MLST Type;Size;Modify;Perm;",也接受 "OPTS MLST Type;Size;Modify;Perm"。 + 为 MLST 和 MLSD 命令添加了 "Perm" 功能,"Perm" 标识了 MLST/MLSD 列表中与连接用户相关项目的权限。 + 为 MLST 和 MLSD 命令添加了 "Win32.dt" 功能。当列出 /C:/、/D:/、或 / 时,"Win32.dt" 为磁盘驱动器列表标识了驱动器类型。如果对象不是磁盘驱动器,则不会在目录列表中返回该功能的结果。 + 为 MLST 和 MLSD 命令添加了 "Win32.dl" 功能。当列出 /C:/、/D:/、或 / 时,"Win32.dl" 为磁盘驱动器列表标识了驱动器卷标。如果对象不是磁盘驱动器,则不会在目录列表中返回该功能的结果。 + 对于 "os.UNIX=slink",添加更多信息到 MLST / MSLD Type 结果,并且如果向用户提供 ":linked_path",则 Serv-U 还会追加该信息。 + 改进了 Windows 快捷方式解决方案,以同时包括使用相对路径和其他属性组合的快捷方式。 + 添加了使用 "SITE EXEC" 命令时指定带空格的路径名的功能。如果需要使用空格,Serv-U 将文件名括起来解析。 + 添加了 XDEL 命令,功能与 DELE 命令相同。 + 添加了 RMDA 目录作为 RMD 的父集,使得客户端可以用一个命令删除目录及其所有文件和子目录。一则错误响应指出客户端应刷新其目录列表,以确定哪些文件和子目录被删除,哪些未被删除。 + 更改了 Windows 链接支持,从而当遇到 Windows .LNK 文件时,对于 SIZE 命令和传输操作,将其作为列表显示时所引用的文件处理。 + 删除了 -L LIST 和 NLST 选项,因为它们会与其他设置冲突。 + 在辅助线程执行所有冗长的命令,以便释放主线程供其他客户端使用。这些操作包括 LIST、NLST、MLST、MLSD、RMDA、RETR、THMB、RNTO、XCRC、STOR、APPE、STOU、SITE EXEC 以及所有其他冗长的操作。 + 添加了使用多个 CPU 的功能,以执行占用 CPU 较多的操作。 + 向 "226 传输完成" 应答中添加了传输总量和传输速率信息。 + 向压缩的 "226 传输完成" 应答中添加了压缩总量、统计和传输速率信息。 + 添加了在域上以及服务器上定义反攻击限制的功能。 + 将消息文件中最大字符串长度从 195 个字符增加到 512 个字符。 + 添加了一个选项以包含服务器对 FTP 命令处理器的响应值,从而在多行响应的每一行中包含数字响应代码。 + 添加了一个选项以包含服务器对个别消息文件的响应值。 + 使用合适的 FTP 命令移动消息文件设置到个别命令处理器。 + 添加了基于文件扩展名,为某些类型的文件设置最大文件尺寸的功能。该功能通过目录访问规则得以实现,在规则中可使用通配符来标识文件访问权限。 + 为目录访问规则中指定的目录添加了最大目录尺寸限制,以取代磁盘配额。 + 除了会话带宽限制,还为整个服务器、每个域、每个群组和每个用户添加了上传和下载带宽限制。 + 为 STAT 命令添加了更多统计信息。 + 改进了 ALLO 命令,使其不仅能够检查可用的硬盘空间,还能检查用户可用的磁盘空间数量。该处更改考虑了配额和目录大小限制。 + 添加了使用 FTP LIST 命令,以 Microsoft IIS FTP Server (-h:IIS) 格式,或 DOS (-h:DOS) (Windows 2000 或更高版本中的命令行) 格式,显示目录列表的功能。 + 添加了 -h:"DOS"、-h:"IIS"、和 -h:"UNIX" (默认) LIST 指令。-h:"DOS" 以类似于 Windows 命令行的方式列出文件和目录。-h:"IIS" 以类似于 Microsoft 的 IIS FTP 服务器的方式列出文件和目录。-h:"UNIX" 以类似于 BSD UNIX FTP 服务器的方式列出文件和目录。任何其他 -h"xxx" 指令都将恢复为 "UNIX" 样式的列表。该指令不区分大小写。 + 更改了 IP 访问规则的操作。如果没有 "允许访问" 规则,则自动假定为 "*.*.*.*" 。 + 添加了功能,使得从活动会话列表中断开用户连接时,可以在 IP 访问规则列表中查看被阻止的 IP 地址。 + 当上传并覆盖文件时,以指定的文件名重命名原始文件。 + 更改了目录列表,使得当锁定用户于根目录时,不会显示 "." 和 ".." 。 + 在正常显示 "." 和 ".." 的目录列表中,无论这两个目录是否存在于 Windows 中都正常显示。这有助于导航并防止用户推断出目录是否为根目录虚拟路径。 + 添加了功能,可以使用 FTP 命令,在有关失败操作的日志中查看密码。 + 添加了用户归类,有助于对用户进行合理的分组管理。当将用户分别置于不同类别中时,管理控制台和 Ser-U 都能更有效地操作。 + 现在只需通过允许访问相应的物理路径,就可以授予虚拟路径的访问权限。早先的版本还需要明确设置虚拟路径的访问权。 - 修正了以下错误:至少登录一次以后当试图登录的次数超过了上限值时, Serv-U 会返回两个而不是一个错误应答。 - 修正了某些 LIST 和 NLST 参数不能正常工作的错误,例如忽略某些文件的 -I:"*.txt" 参数。 - 修正了 MLST/MLSD 中 Serv-U 返回的文件时间误差 1 小时的错误,这是因为服务器当前以夏时制运行而文件日期和时间并未采用夏时制,反之亦然。 - 修正了以下错误:当使用包含通配符的字符串指定完整的路径时,"子目录继承" 设置会被忽略。例如,即使选择了继承参数,C:\Windows\*.jpg 也不会包含 C:\Windows\System32\*.jpg。 - 修正了以下错误:当虚拟路径引用父目录时,递归目录列表会导致 Serv-U 崩溃。 - 修正了以下错误:当使用 "盲" 目录时,如果可以访问至少嵌套两层的目录,则会话可能永远无法使用 CWD 命令返回根目录。 托盘 + 添加了新的风格菜单。 + 添加了使用不同主题的功能。 + 添加了主题编辑器。 + 添加了气球提示。 + 添加了自动更新检查器。 + 在弹出式菜单中添加了支持链接。 + 在鼠标置于上方时出现的工具提示中添加了更多统计信息。
自己写的ftp服务端程序代码,支持{"USER", do_user }, {"PASS", do_pass }, {"CWD", do_cwd }, {"XCWD", do_cwd }, {"CDUP", do_cdup }, {"REIN", do_rein },//重新初始化,此命令终止USER,重置所有参数,控制连接仍然打开,用户可以再次使用USER命令 {"QUIT", do_quit }, /*------------传输参数命令------------*/ {"PORT", do_port },//数据端口,主要向服务器发送客户数据连接的端口 //格式为PORT h1,h2,h3,h4,p1,p2,其中32位的IP地址用h1,h2,h3,h4表示,16位的TCP端口号用p1,p2表示 {"PASV", do_pasv },//此命令要求服务器数据传输进程在指定的数据端口侦听,进入被动接收请求的状态 {"TYPE", do_type },//文件类型,可指定ASCII码、EBCDIC码、Image、本地类型文件等参数 /*------------服务命令----------------*/ {"RETR", do_retr },//下载文件 {"STOR", do_stor },//上传 {"APPE", do_appe },//上传,如文件已存在,数据附加到尾部 {"REST", do_rest },//重新开始 {"RNFR", do_rnfr }, {"RNTO", do_rnto },//重命名文件或目录 {"ABOR", do_abor },//异常终止 {"DELE", do_dele },//删除文件 {"RMD", do_rmd },//删除目录 {"XRMD", do_rmd }, {"MKD", do_mkd },//新建目录 {"XMKD", do_mkd }, {"PWD", do_pwd },//打印当前目录 {"XPWD", do_pwd }, {"LIST", do_list },//列目录详细清单 {"NLST", do_nlst },//列目录短清单 {"SYST", do_syst },//获取系统信息 {"STAT", do_stat },//返回服务器状态 {"SIZE", do_size },//获得文件大小 {"HELP", do_help }, {"NOOP", do_noop }, {"SITE", do_site }, }等命令

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧