質問
資格情報を持つFTPサーバーを使用するプログラムを書いています。サーバーからディレクトリリストを取得しようとしていますが、行に到達したら:
string line = reader.ReadLine();
私が取得した文字列には、「 "を開けない" host:/lib1 "。"。 "
別の行を取得しようとすると、次の例外がスローされます。リモートサーバーはエラーを返しました:(550)ファイルは利用できません(たとえば、ファイルが見つかりません、アクセスなし)。
私は確かに(別のFTPアプリケーションを使用して)FTPサーバーに 'lib1'ディレクトリが存在し、私の資格情報(ユーザー名とパスワード)が正しいことを知っています。
これが私のコードです:
public class FTPClient
{
public string UserName { get; set; }
public string Password { get; set; }
public string IpAddress { get; set; }
public int Port { get; set; }
public FTPClient(string _userName, string _password, string _address, int _port)
{
UserName = _userName;
Password = _password;
IpAddress = _address;
Port = _port;
}
public void GetDirectoriesList(string _path)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("ftp://" +
IpAddress + _path));
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(UserName, Password);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string line = reader.ReadLine();
while (line!=null)
{
... //do something with line
line = reader.ReadLine();
}
...
reader.Close();
response.Close();
}
そして、私はそれを次のように使用します:
FTPClient ftpClient = new FTPClient("user1", "pass1", "192.168.2.110", 21);
string dirList = ftpClient.GetDirectoriesList("/lib1");
誰かが問題を見つけることができますか?
正しい解決策はありません
他のヒント
私の解決策:
public string[] GetDirectory()
{
StringBuilder result = new StringBuilder();
FtpWebRequest requestDir = (FtpWebRequest)WebRequest.Create("ftp://urserverip/");
requestDir.Method = WebRequestMethods.Ftp.ListDirectory;
requestDir.Credentials = new NetworkCredential("username", "password");
FtpWebResponse responseDir = (FtpWebResponse)requestDir.GetResponse();
StreamReader readerDir = new StreamReader(responseDir.GetResponseStream());
string line = readerDir.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = readerDir.ReadLine();
}
result.Remove(result.ToString().LastIndexOf('\n'), 1);
responseDir.Close();
return result.ToString().Split('\n');
}
Abdul Waheed'sのいくつかの改良 答え:
- 追加した
using
ブロックしてクリーンアップしますFtpWebResponse
とStreamReader
オブジェクト; 文字列操作の削減:
private static string[] GetDirectoryListing() { FtpWebRequest directoryListRequest = (FtpWebRequest)WebRequest.Create("ftp://urserverip/"); directoryListRequest.Method = WebRequestMethods.Ftp.ListDirectory; directoryListRequest.Credentials = new NetworkCredential("username", "password"); using (FtpWebResponse directoryListResponse = (FtpWebResponse)directoryListRequest.GetResponse()) { using (StreamReader directoryListResponseReader = new StreamReader(directoryListResponse.GetResponseStream())) { string responseString = directoryListResponseReader.ReadToEnd(); string[] results = responseString.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries); return results; } } }
所属していません StackOverflow