在组合框中列出FTP内容

本文关键字:FTP 内容 组合 | 更新日期: 2023-09-27 18:27:22

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

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

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

在组合框中列出FTP内容

首先,我没有得到您的第一个代码。如果我理解正确的话,你有一个字符串数组,用这个旧样式(i=0;ilt 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());
}