获取FTP目录内容问题,如果它为空

本文关键字:如果 问题 FTP 获取 | 更新日期: 2023-09-27 18:11:27

我有代码获取一些FTP目录的内容。在我测试过的一些服务器上,它工作得很好。

但是在一个服务器上,当我们试图获得响应时,该方法会抛出异常。

public static List<string> ListDirectory(string dirPath, string ftpUser, string ftpPassword)
    {
        List<string> res = new List<string>();
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(dirPath);
        request.Method = WebRequestMethods.Ftp.ListDirectory;
        request.Credentials = new NetworkCredential(ftpUser, ftpPassword);
        request.KeepAlive = false;
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        while (!reader.EndOfStream)
        {
            res.Add(reader.ReadLine());
        }
        reader.Close();
        response.Close();
        return res;
    }

在catch部分有这样的内容

catch (WebException e)
{
   FtpWebResponse response = (FtpWebResponse)e.Response;
   /*in my case response.Status = ActionNotTakenFileUnavailableOrBusy*/
   ....
}

它以前工作,但现在它失败时,文件夹是空的。如果有什么东西在那里,它就会起作用。我可以看到TotalCommander的目录。

知道为什么吗?

获取FTP目录内容问题,如果它为空

这是一个关于如何使用CodePlex提供的免费库System.Net.FtpClient获取远程目录列表的示例。
我在很多场合使用过它,在我看来,

更容易使用。
public void GetListing() 
{
    using (FtpClient conn = new FtpClient()) 
    {
        conn.Host = "your_ftp_site_url";
        conn.Credentials = new NetworkCredential("your_user_account", "your_user_password");
        foreach (FtpListItem item in conn.GetListing(conn.GetWorkingDirectory(),  FtpListOption.Modify | FtpListOption.Size)) 
        {
              switch (item.Type) 
              {
                    case FtpFileSystemObjectType.Directory:
                        Console.WriteLine("Folder:" + item.Name);
                        break;
                    case FtpFileSystemObjectType.File:
                        Console.WriteLine("File:" + item.Name);
                        break;
            }
        }
    }
}

你可以在本页找到下载

相关文章: