在ComboBox中列出FTP内容

时间:2013-08-11 01:17:48

标签: c# wpf

首先,我的计划正在做什么。 我有一个名为DirListing的组合框,我有FTP代码连接到我的服务器。我有一个“更新列表”按钮,这样一旦你点击它,它会列出目录中的所有内容。我想要列出目录,但在组合框中。这就是我所拥有的。

onClick的代码。

private void updateList_Click(object sender, EventArgs e)
 {
   string[] listDir = ftpClient.directoryListSimple("/");
   for (int i = 0; i < listDir.Count(); i++)
    {
      DirListing.Items.AddRange(listDir);
    }
 }

这是directoryListSimple

public string[] directoryListSimple(string directory)
        {
            try
            {
                ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + directory);
                ftpRequest.Credentials = new NetworkCredential(user, pass);
                ftpRequest.UseBinary = true;
                ftpRequest.UsePassive = true;
                ftpRequest.KeepAlive = true;
                ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
                ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
                ftpStream = ftpResponse.GetResponseStream();
                StreamReader ftpReader = new StreamReader(ftpStream);
                string directoryRaw = null;
                try { while (ftpReader.Peek() != -1) { directoryRaw += ftpReader.ReadLine() + "|"; } }
                catch (Exception ex) { Console.WriteLine(ex.ToString()); }
                ftpReader.Close();
                ftpStream.Close();
                ftpResponse.Close();
                ftpRequest = null;
                try { string[] directoryList = directoryRaw.Split("|".ToCharArray()); return directoryList; }
                catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            return new string[] { "" };
        }

当然还有其他FTP信息,例如onClick上方的实际登录信息。

ftp ftpClient = new ftp(@"server", "user", "password");

每当我调试程序并单击“更新列表”时,按钮,只需在组合框中添加一个空格。

有人可以帮我实现在目录组合框中列出文件的目标吗?

1 个答案:

答案 0 :(得分:0)

首先,我没有得到你的第一个代码。如果我理解正确你有一个字符串数组,用这个旧样式迭代每个(i = 0; i lt x; i ++)并在每次迭代时将整个数组添加到你的组合框中,这意味着如果你有10个字符串,你将它们添加10次...不确定它是你想要的。这应该有效:

private void updateList_Click(object sender, EventArgs e)
{
      DirListing.Items.AddRange(ftpClient.directoryListSimple("/"));
}

其次,在调试时,是否填充了字符串数组?我不这么认为,对我来说,问题来自你检索文件列表的方式。您在ftp请求期间有任何异常吗?

如果在没有try / catch的情况下运行此代码以查看异常,该怎么办?

public string[] directoryListSimple(string directory)
{
    ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + directory);
    ftpRequest.Credentials = new NetworkCredential(user, pass);
    ftpRequest.UseBinary = true;
    ftpRequest.UsePassive = true;
    ftpRequest.KeepAlive = true;
    ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
    ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
    ftpStream = ftpResponse.GetResponseStream();
    StreamReader ftpReader = new StreamReader(ftpStream);
    string directoryRaw = null;
    while (ftpReader.Peek() != -1) 
    { 
        directoryRaw += ftpReader.ReadLine() + "|"; 
    } 
    ftpReader.Close();
    ftpStream.Close();
    ftpResponse.Close();
    ftpRequest = null;
    return directoryRaw.Split("|".ToCharArray());
}