我正在尝试创建一个列表,该列表列出在FTP服务器上的文件夹中找到的所有文件名。完整目录与登录凭据一起保存在设置数据库表中。它可以很好地连接到FTP区域,并且我可以在其中上传文件或从中下载文件。
这是我从文件夹中获取文件的代码。
lstFiles = new List<string>();
string remoteFTPPath = ftpLocation;
var request = (FtpWebRequest)WebRequest.Create(remoteFTPPath);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
request.Proxy = null;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
List<string> directories = new List<string>();
string line = reader.ReadLine();
while (!string.IsNullOrEmpty(line))
{
directories.Add(line);
line = reader.ReadLine();
}
reader.Close();
我遇到的问题是,我要搜索的文件夹当前为空,但是却找到2个文件。
这是为什么?
remoteFTPPath
中的值为ftp://ftp.myArea.co.uk/myServer.co.uk/System-Files/
这是我在FileZilla中打开的文件夹-绝对是空文件夹。
如何仅查看“系统文件”中的所有文件并将它们放入列表中?
FileZilla日志:
状态:已登录
状态:正在检索“ /myArea.co.uk”的目录列表...
状态:“ / myArea.co.uk”的目录列表成功
状态:正在检索“ /myArea.co.uk/System-Files”的目录列表...
状态:“ / myArea.co.uk/System-Files”的目录列表成功
并且在C#应用程序上测试相同的代码时,Network.log
文件的输出如下。
System.Net信息:0:[6132] FtpWebRequest#60068066 ::。ctor(ftp://ftp.myServer.co.uk/myArea.co.uk/System-Files/)
System.Net信息:0:[6132]当前操作系统安装类型为“客户端”。
System.Net信息:0:[6132] FtpWebRequest#60068066 :: GetResponse(Method = LIST。)
System.Net信息:0:[6132] FtpControlStream#34640832-已创建从xxx.xxx.x.xx:YYYY到xxx.xxx.xxx.x:YY的连接。
System.Net信息:0:[6132]将FtpWebRequest#60068066与FtpControlStream#34640832
相关联 System.Net信息:0:[6132] FtpControlStream#34640832-收到的响应[220-Matrix FTP服务器已就绪。
220-这是一个私人系统-没有匿名登录
此服务器上也欢迎220-IPv6连接。
220请注意:您网站的文件必须存储在htdocs目录下。]
System.Net信息:0:[6132] FtpControlStream#34640832-发送命令[USER myUser]
System.Net信息:0:[6132] FtpControlStream#34640832-接收到的响应[331用户myUser确定。需要密码]
System.Net信息:0:[6132] FtpControlStream#34640832-发送命令[PASS ********]
System.Net信息:0:[6132] FtpControlStream#34640832-收到响应[230 OK。当前目录为/]
System.Net信息:0:[6132] FtpControlStream#34640832-发送命令[OPTS utf8 on]
System.Net信息:0:[6132] FtpControlStream#34640832-收到的响应[500未知命令]
System.Net信息:0:[6132] FtpControlStream#34640832-发送命令[PWD]
System.Net信息:0:[6132] FtpControlStream#34640832-收到的响应[257“ /”是您当前的位置]
System.Net信息:0:[6132] FtpControlStream#34640832-发送命令[CWD /myArea.co.uk/System-Files]
System.Net信息:0:[6132] FtpControlStream#34640832-收到响应[250 OK。当前目录为/myArea.co.uk/System-Files]
System.Net信息:0:[6132] FtpControlStream#34640832-发送命令[TYPE I]
System.Net信息:0:[6132] FtpControlStream#34640832-收到的响应[200 TYPE现在是8位二进制]
System.Net信息:0:[6132] FtpControlStream#34640832-发送命令[PASV]
System.Net信息:0:[6132] FtpControlStream#34640832-收到的响应[227进入被动模式(213,171,193,5,117,157)]
System.Net信息:0:[6132] FtpControlStream#34640832-发送命令[LIST]
System.Net信息:0:[6132] FtpControlStream#34640832-收到的响应[150接受的数据连接]
System.Net信息:0:[6132] FtpControlStream#34640832-收到的响应[226-ASCII
226-选项:-a -l <br/> 总共226 2个匹配项]
System.Net信息:0:[6132] FtpWebRequest#60068066 :: :(释放FTP连接#34640832。)
System.Net信息:0:[14644] ServicePoint#33675143-以空闲状态关闭。
答案 0 :(得分:1)
许多FTP服务器在目录列表中返回.
和..
条目,类似于* nix ls -a
或Windows dir
命令。这些分别是对目录本身和父目录的引用。
您将获得任何目录的目录,甚至是空目录(有时(例如,在Windows服务器上),但根目录除外)。
如果您不想要这些,则需要在代码中将其过滤掉。 FileZilla肯定还能做什么。