1

首先,我的程序在做什么。我有一个名为 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);
    }
 }

这是目录ListSimple

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");

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

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

4

1 回答 1

0

首先,我没有得到你的第一个代码。如果我理解正确,您有一个字符串数组,请使用这种旧样式 for(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());
}
于 2013-08-11T01:43:00.867 回答