0

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 (WebException e)
{
   FtpWebResponse response = (FtpWebResponse)e.Response;
   /*in my case response.Status = ActionNotTakenFileUnavailableOrBusy*/
   ....
}

以前は機能していましたが、フォルダーが空の場合は失敗します。そこに何かがあれば、それは機能します。このディレクトリは TotalCommander で見ることができます。

理由はありますか?

4

1 に答える 1

0

これは、 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;
            }
        }
    }
}

このページからダウンロードできます

于 2013-04-30T15:23:40.717 に答える