为什么此代码重复列表框中的文件
本文关键字:文件 列表 代码 为什么 | 更新日期: 2023-09-27 17:59:10
我想列出ftp文件夹中的所有文件,我正在使用这段代码。但它给了我两倍的文件名。它怎么了?
private void ListFilesOnServer()
{
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ConfigurationSettings.AppSettings.Get("IncomingFtpPath"));
request.Credentials = new NetworkCredential("user", "password");
request.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (System.IO.Path.GetExtension(line) == ".xml")
{
WaitingListBox.Items.Add(System.IO.Path.GetFileNameWithoutExtension(line));
}
}
reader.Close();
response.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
- 使用调试器查看"响应"中包含的内容
- 请确保您的函数只被调用一次
- 此外,您确定"重复"不是具有相同名称但绝对路径不同的文件吗
关于你的代码:
- 在操作流时更喜欢使用指令,而不是手动关闭它们:在这里,您的代码可能会在不释放资源的情况下抛出异常
-
避免吞咽异常(即使您显示它们)
private void ListFilesOnServer() { try { FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ConfigurationSettings.AppSettings.Get("IncomingFtpPath")); request.Credentials = new NetworkCredential("user", "password"); request.Method = WebRequestMethods.Ftp.ListDirectory; FtpWebResponse response = (FtpWebResponse)request.GetResponse(); using(StreamReader reader = new StreamReader(response.GetResponseStream()) { string line = null; while((line = reader.ReadLine()) != null) { if (System.IO.Path.GetExtension(line) == ".xml") { WaitingListBox.Items.Add(System.IO.Path.GetFileNameWithoutExtension(line)); } } } } catch (Exception e) { MessageBox.Show(e.Message); // throw e }