2012-09-25 68 views
1

我需要編寫一個例程,它可以完全下載服務器上的給定目錄 - 所有文件和目錄。在C中使用FTP下載多個文件

現在我有一個程序,列出目錄內容

public List<string> GetListOfFiles(string serverPath) 
     { 
      List<string> files = new List<string>(); 
      try 
      { 

       FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + serverPath);    
       request.Credentials = new NetworkCredential(_domain + "\\" + _username, _password); 
       request.Method = WebRequestMethods.Ftp.ListDirectory;    


       FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
       StreamReader reader = new StreamReader(response.GetResponseStream()); 

       string line = reader.ReadLine(); 
       while (line != null) 
       { 
        files.Add(line);      
        line = reader.ReadLine(); 
       } 
       response.Close(); 

      }   
      catch (WebException ex) 
      { 
       FtpWebResponse response = (FtpWebResponse)ex.Response; 
       string exMsg = string.Empty; 

       switch (response.StatusCode) 
       { 
        case FtpStatusCode.NotLoggedIn: 
         exMsg = "wrong username/password"; 
         break; 


        default: 
         exMsg = "The server is inaccessible or taking too long to respond."; 
         break; 
       } 


       throw new Exception(exMsg); 
      } 
      return files; 

     } 

的問題是,我得到的文件和目錄的列表...所以像

file1.dll
文件2。 dll
dir1Name

有沒有辦法在列出文件名和目錄名時區分?像一面旗子?

+3

由'ListDirectory'返回的響應不是標準化的,可以根據服務器運行的軟件而有所不同。正因爲如此,沒有一種從文件中分辨目錄的好方法。 – cadrell0

回答

1

不幸的是,返回的信息實際上是FTP服務器的功能,而不是框架。

您可以ListDirectoryDetails而不是ListDirectory,它應該爲您提供更詳細的信息(包括每個文件是目錄還是文件),但需要特殊解析,因爲它的格式也依賴於FTP服務器。