首先,我的计划正在做什么。 我有一个名为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");
每当我调试程序并单击“更新列表”时,按钮,只需在组合框中添加一个空格。
有人可以帮我实现在目录组合框中列出文件的目标吗?
答案 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());
}