为什么此代码重复列表框中的文件

本文关键字:文件 列表 代码 为什么 | 更新日期: 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
            }