c# - 使用凭据连接 ftp 服务器

标签 c# ftp ftpwebresponse

我正在编写一个使用带有凭据的 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');
}

关于c# - 使用凭据连接 ftp 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4584789/

相关文章:

c# - 如何使用 C# 使用 MsTest 对属性进行单元测试?

c# - 从 .NET 3.5 更新到 .NET 4.6 后出现 XmlSerializer 错误

javascript - 使用 multer-ftp 重命名文件

java - 如何使用 Camel 和 Java DSL 创建具有多个连接的 ftp 调用的路由?

c# - 如何使用 FtpWebResponse 创建 WebException 进行测试?

c# - Winforms 中的简单相机捕获

c# - 使用 asp.net mvc 4 knockout 模型的一部分被发布为 null

c# - 如何从 ftp 保存文件?

c# - 程序在 FtpWebResponse 上挂起

c# - 从 WebRequestMethods.Ftp.ListDirectoryDe​​tails 中提取文件名