【问题标题】:List all files from online FTP directory to a listview C#将在线 FTP 目录中的所有文件列出到列表视图 C#
【发布时间】:2012-12-17 22:19:33
【问题描述】:

我和其他正在阅读此列表的其他人如何将在线目录中的所有文件列出到列表视图?

这是要列出的本地目录的代码我想知道是否有办法让它连接到 FTP 网站并列出文件?

FolderBrowserDialog folderPicker = new FolderBrowserDialog();
if (folderPicker.ShowDialog() == DialogResult.OK)
{

    ListView1.Items.Clear();

    string[] files = Directory.GetFiles(folderPicker.SelectedPath);
    foreach (string file in files)
    {

        string fileName = Path.GetFileNameWithoutExtension(file);
        ListViewItem item = new ListViewItem(fileName);
        item.Tag = file;

        ListView1.Items.Add(item);

    }

}

我已经使用了这段代码,但我似乎无法让它工作它没有出现错误但它也没有列出网络服务器上的文件?

private void ConnectBtn_Click(object sender, EventArgs e)
    {
        ListDirectory();
    }

    public string[] ListDirectory()
    {
        var list = new List<string>();

        var request = createRequest(TxtServer.Text, WebRequestMethods.Ftp.ListDirectory);

        using (var response = (FtpWebResponse)request.GetResponse())
        {
            using (var stream = response.GetResponseStream())
            {
                using (var reader = new StreamReader(stream, true))
                {
                    while (!reader.EndOfStream)
                    {
                        list.Add(reader.ReadLine());
                    }
                }
            }
        }

        return list.ToArray();
    }

    private FtpWebRequest createRequest(string uri, string method)
    {
        var r = (FtpWebRequest)WebRequest.Create(uri);

        r.Credentials = new NetworkCredential(TxtUsername.Text, TxtPassword.Text);
        r.Method = method;

        return r;
    }

【问题讨论】:

    标签: c# listview ftp


    【解决方案1】:

    您可以使用this wrapper library

    相关代码为:

        public string[] ListDirectory() {
            var list = new List<string>();
    
            var request = createRequest(WebRequestMethods.Ftp.ListDirectory);
    
            using (var response = (FtpWebResponse)request.GetResponse()) {
                using (var stream = response.GetResponseStream()) {
                    using (var reader = new StreamReader(stream, true)) {
                        while (!reader.EndOfStream) {
                            list.Add(reader.ReadLine());
                        }
                    }
                }
            }
    
            return list.ToArray();
        }
    

    【讨论】:

    • 找不到createRequest
    • 我将其更改为 WebRequest.Create() 但我在哪里放置有关它想要连接的服务器以及 FTP 的用户名和密码的信息?
    • createRequest 在类的底部。它是私有方法之一,倒数第三个。
    • 你把它想要连接的服务器以及用户名和密码的信息放在类的构造函数中,如myClient = new Client(uri, userName, password);
    • 我试过了,它没有出现错误,但它也没有加载文件哦,它不允许我将代码注释为大:/
    【解决方案2】:

    这是获取 FTP 目录的所有文件和文件夹的好帮手:

    public static IEnumerable<string> GetFilesInFtpDirectory(string url, string username, string password)
    {
        // Get the object used to communicate with the server.
        var request = (FtpWebRequest)WebRequest.Create(url);
        request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        request.Credentials = new NetworkCredential(username,password);
    
        using (var response = (FtpWebResponse) request.GetResponse())
        {
            using (var responseStream = response.GetResponseStream())
            {
                var reader = new StreamReader(responseStream);
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (string.IsNullOrWhiteSpace(line) == false)
                    {
                        yield return line.Split(new[] { ' ', '\t' }).Last();    
                    }
                }
            }
        }
    }
    

    在这里找到:http://www.snippetsource.net/Snippet/128/get-all-files-of-an-ftp-directory-in-c

    【讨论】:

      【解决方案3】:

      我找到了答案,我做了一些试验,现在它在列表视图中显示文件,谢谢罗伯特哈维♦

      private void ConnectBtn_Click(object sender, EventArgs e)
          {
              ListDirectory();
          }
      
          public string[] ListDirectory()
          {
              var list = listView1;
      
              var request = createRequest(TxtServer.Text, WebRequestMethods.Ftp.ListDirectory);
      
              using (var response = (FtpWebResponse)request.GetResponse())
              {
                  using (var stream = response.GetResponseStream())
                  {
                      using (var reader = new StreamReader(stream, true))
                      {
                          while (!reader.EndOfStream)
                          {
                              list.Items.Add(reader.ReadLine());
                          }
                      }
                  }
              } List<string> l = new List<string>();
              return l.ToArray();
          }
      
          private FtpWebRequest createRequest(string uri, string method)
          {
              var r = (FtpWebRequest)WebRequest.Create(uri);
      
              r.Credentials = new NetworkCredential(TxtUsername.Text, TxtPassword.Text);
              r.Method = method;
      
              return r;
          }
      

      【讨论】:

        【解决方案4】:

        此代码可用于从 ftp 获取文件列表

        private void ftpFileRead()
        {
          FtpWebRequest Request = (FtpWebRequest)WebRequest.Create("your ftpAddress");
          Request.Method = WebRequestMethods.Ftp.ListDirectory;     
          Request.Credentials = new NetworkCredential(your ftp username,your ftp password);
          FtpWebResponse Response = (FtpWebResponse)Request.GetResponse();
          Stream ResponseStream = Response.GetResponseStream();
          StreamReader Reader = new StreamReader(ResponseStream);
        
          ListBox1.Items.Add(Response.WelcomeMessage);
          while (!Reader.EndOfStream)//Read file name   
          {
            ListBox1.Items.Add(Reader.ReadLine().ToString());
          }
          Response.Close();
          ResponseStream.Close();
          Reader.Close();
        }
        

        【讨论】:

          【解决方案5】:

          你可以使用这个方法。

              public static string[] GetFiles(string path, NetworkCredential Credentials, SearchOption searchOption)
              {
                  var request = (FtpWebRequest)WebRequest.Create(path);
                  request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                  request.Credentials = Credentials;
                  List<string> files = new List<string>();
                  using (var response = (FtpWebResponse)request.GetResponse())
                  {
                      using (var responseStream = response.GetResponseStream())
                      {
                          var reader = new System.IO.StreamReader(responseStream);
                          while (!reader.EndOfStream)
                          {
                              var line = reader.ReadLine();
                              if (string.IsNullOrWhiteSpace(line) == false)
                              {
                                  if (!line.Contains("<DIR>"))
                                  {
                                      string[] details = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                                      string file = line.Replace(details[0], "")
                                          .Replace(details[1], "")
                                          .Replace(details[2], "")
                                          .Trim();
                                      files.Add(file);
                                  }
                                  else
                                  {
                                      if (searchOption == SearchOption.AllDirectories)
                                      {
                                          string dirName = line.Split(
                                                  new string[] { "<DIR>" },
                                                  StringSplitOptions.RemoveEmptyEntries
                                                  ).Last().Trim();
                                          string dirFullName = String.Format("{0}/{1}", path.Trim('/'), dirName);
                                          files.AddRange(GetFiles(dirFullName, Credentials, searchOption));
                                      }
                                  }
                              }
                          }
                      }
                  }
                  return files.ToArray();
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-16
            • 2011-06-13
            • 2017-05-01
            相关资源
            最近更新 更多