今天获取小众ftp服务器指定目录内容列表时费劲急了。
- ///parama url="ftp://x.x.x.x/dir_name"
- public string GetFTPDir(string url)
- {
- FtpWebRequest reqFtp;
- try
- {
- reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
- reqFtp.KeepAlive = false;
- //reqFtp.UseBinary = true; //指定ftp数据传输类型为 二进制
- //reqFtp.Credentials = new NetworkCredential(USERID, PassWord); //设置于ftp通讯的凭据
- reqFtp.Method = WebRequestMethods.Ftp.ListDirectoryDetails; //指定操作方式
- WebResponse response;
- response = reqFtp.GetResponse(); //获取一个FTP响应
- StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); //读取响应流
- string contentHTML = sr.ReadToEnd(); //读取网页的源代码
- sr.Close();
- return contentHTML;
- }
- catch (Exception ex)
- {
- return ex.Message;
- }
- }
当访问iis的ftp服务器时没有错误,访问一个小型ftp时报错227,查阅资料后修改第9行为reqFtp.UsePassive = false;
执行后有了返回,但是为根目录的列表。
.Net的FtpWebRequest没有改变当前目录操作,而是只能创建时指定文件或目录。百般无奈时,想到url应该是一个文件,目录在自己的下面显示一个“.”表示自己。所以修改url参数为url="ftp://x.x.x.x/dir_name/."。再次执行代码果然通过,不论iis ftp还是小型ftp服务器均通过。