ftpWebReponse(ListDirectory)FTP批准的登录过程,但不返回文件夹数据

时间:2015-04-21 18:45:59

标签: c# ftpwebrequest getresponsestream

我一直在尝试使用Visual C#连接到远程FTP服务器,并列出服务器上的文件夹。最后,我试图找出如何通过单击按钮自动将文件上传到此服务器。我想我的第一步是看看文件夹在远程FTP服务器上是如何构建的。但是,当我尝试查看调试中传递的结果时,它似乎是空的,虽然我没有从进程中收到任何错误,并且调试中的参数使它看起来像我已成功登录。我也是在响应数据中接收文件传输完成消息226。这是我尝试过的最新代码,虽然我在FtpWebRequest函数中尝试过各种各样的东西。如果我关闭UsePassive,它会永远坐在那里,我从来没有得到过服务器的响应。有没有人对可能导致这个或某些可能需要设置的参数的设置有任何想法?

private void button4_Click(object sender, EventArgs e)
    {
        FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://sampleftpplace.com/");
        ftpRequest.UseBinary = true;
        ftpRequest.Credentials = new NetworkCredential("username", "password");
        ftpRequest.EnableSsl = true;
        ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
        ftpRequest.Proxy = null;
        ftpRequest.Timeout = -1;
        ftpRequest.KeepAlive = false;
        //ftpRequest.UsePassive = false;
        FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
        StreamReader streamReader = new StreamReader(response.GetResponseStream());

        List<string> directories = new List<string>();

        string line = streamReader.ReadLine();
        while (!string.IsNullOrEmpty(line))
        {
            directories.Add(line);
            line = streamReader.ReadLine();
        }

        streamReader.Close();
    }

当&#34; string line = streamReader.Readline();&#34;执行,变量&#34; line&#34;一片空白。我真正想要的是查看哪些文件夹可用,这样我就可以看到FTP服务器的原始程序员如何构建他们的文件夹,以及他们使用的命名约定。如果该程序员不再可用,这可能吗?

1 个答案:

答案 0 :(得分:0)

我只是有一个疯狂的想法,结果证明它有效!基本上,我改变了前几行,如下所示:

Uri uri = new Uri("ftp://sampleftpplace.com//");
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri);

首先,我使用了命令Uri。不确定这是否重要,但真正重要的是第二个&#34; /&#34;在URL地址中。我认为服务器在我添加之前没有将其视为根目录。一旦我把它放进去,我现在就看到了文件夹。谢谢!