1

何らかの理由で機能しないコードについて助けが必要です。FTP ディレクトリ内のファイルのリストを取得するメソッドを作成しています。アプリをデバッグするたびに、StatusCode 530 (ログインしていない) で WebException がスローされます。 アドレス、ユーザー名、およびパスワードが正しいことを 100% 確信していることを覚えておいてください。 メソッドは次のとおりです。

public static List<string> GetFileList(string Directory)
    {
        List<string> Files = new List<string>();
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(ServerInfo.Root + Directory));
        request.Method = WebRequestMethods.Ftp.ListDirectory;
        request.Credentials = new NetworkCredential(ServerInfo.Username, ServerInfo.Username);
        FtpWebResponse response = (FtpWebResponse)request.GetResponse(); //Error occurs here
        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        string CurrentLine = reader.ReadLine();
        while (!string.IsNullOrEmpty(CurrentLine))
        {
            Files.Add(CurrentLine);
            CurrentLine = reader.ReadLine();
        }
        reader.Close();
        response.Close();
        return Files;
    }

これは ServerInfo.Root の値です: " ftp://192.xxx.4.xx:21/MPDS " (プライバシーのために一部検閲されています)

MessageBoxes を使用して、完全な URI が正しいことを確認しました。

私は長い間この問題に苦しんできたので、解決を手伝ってくれることを願っています。

前もって感謝します!

4

1 に答える 1

2

このコードをいくつか修正して試すことができます。

public static List<string> GetFileList(string Directory)
    {
        List<string> Files = new List<string>();

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(ServerInfo.Root + Directory));
        request.Method = WebRequestMethods.Ftp.ListDirectory;

        request.Credentials = new NetworkCredential(ServerInfo.Username, ServerInfo.Username); // Is this correct?
        // request.Credentials = new NetworkCredential(ServerInfo.Username, ServerInfo.Password); // Or may be this one?

        request.UseBinary = false;
        request.UsePassive = true;

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        string CurrentLine = reader.ReadLine();
        while (!string.IsNullOrEmpty(CurrentLine))
        {
            Files.Add(CurrentLine);
            CurrentLine = reader.ReadLine();
        }
        reader.Close();
        response.Close();
        return Files;
    }
于 2014-08-05T02:19:28.630 に答える