2012-12-17 43 views
7

Làm cách nào để tôi và tất cả những người khác đang đọc danh sách này tất cả các tệp từ thư mục trực tuyến tới chế độ xem danh sách?Liệt kê tất cả các tệp từ thư mục FTP trực tuyến đến một listview C#

Đây là mã dành cho danh bạ cục bộ được liệt kê, tôi muốn biết liệu có cách nào để kết nối với trang web FTP và liệt kê tệp không?

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); 

    } 

} 

Tôi đã sử dụng mã này nhưng tôi dường như không làm cho nó hoạt động không có lỗi nhưng không liệt kê các tệp trên máy chủ web?

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; 
    } 

Trả lời

9

Bạn có thể sử dụng this wrapper library.

Mã liên quan là:

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(); 
    } 
+0

Không thể tìm thấy createRequest – Terrii

+0

tôi đã thay đổi nó để WebRequest.Create() nhưng nơi nào tôi đặt các thông tin về những gì máy chủ nó muốn kết nối với và tên người dùng và mật khẩu cho FTP? – Terrii

+0

'createRequest' nằm ở cuối lớp. Đó là một trong những phương pháp riêng tư, phương pháp thứ ba từ dưới lên. –

1

Tôi tìm thấy câu trả lời tôi đã làm một chút thử nghiệm và bây giờ nó hiển thị các tập tin trong listview, Cảm ơn bạn Robert Harvey ♦

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; 
    } 
1

Mã này có thể được sử dụng để lấy danh sách các tệp từ 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(); 
} 
7

Dưới đây là một trình trợ giúp tốt để nhận tất cả các tệp và thư mục của một thư mục 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();  
       } 
      } 
     } 
    } 
} 

Tìm thấy ở đây: http://www.snippetsource.net/Snippet/128/get-all-files-of-an-ftp-directory-in-c

+0

Cảm ơn bạn Christian :) – Terrii

0

Bạn có thể sử dụng phương pháp này.

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(); 
    } 
Các vấn đề liên quan