2012-12-17 15 views
7

Jak mogę i wszyscy inni, którzy czytają tę listę wszystkie pliki z katalogu online do listy?Lista wszystkich plików z internetowego katalogu FTP do listy C#

To jest kod dla katalogu lokalnego, który ma być wyświetlany. Chciałbym się dowiedzieć, czy istnieje sposób, aby go połączyć z witryną FTP i wyświetlić listę plików?

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

    } 

} 

Użyłem tego kodu, ale nie wydaje się uzyskać go do pracy jej nie zbliża się z błędem, ale jej nie wymieniając pliki na serwer internetowy albo?

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

Odpowiedz

9

Można użyć this wrapper library.

Odpowiedni kod jest:

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

Nie można znaleźć createRequest – Terrii

+0

Zmieniłem go WebRequest.Create(), ale gdzie mogę umieścić informacje o tym, co serwer chce się połączyć i nazwy użytkownika i hasła do FTP? – Terrii

+0

'createRequest' znajduje się na samym dole klasy. To jedna z prywatnych metod, trzecia od dołu. –

1

Znalazłem odpowiedź Zrobiłem trochę eksperymentować i teraz jego wyświetlania plików w ListView, dziękuję 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

ten kod można użyć do uzyskania listy plików z ftp

7

Oto miły pomocnik, aby uzyskać wszystkie pliki i foldery z katalogu 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();  
       } 
      } 
     } 
    } 
} 

znaleźć tutaj: http://www.snippetsource.net/Snippet/128/get-all-files-of-an-ftp-directory-in-c

+0

Dziękuję Christian :) – Terrii

0

Można użyć tej metody.

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