2010-07-21 93 views
29

如何用C#中的FTP列出目錄內容?如何用C#中的FTP列出目錄內容?

我正在使用下面的代碼來列出目錄內容與FTP它是以XML格式返回結果,但我只想要的目錄名稱不是整個內容。

我該怎麼做?

public class WebRequestGetExample 
{ 
    public static void Main() 
    { 
     // Get the object used to communicate with the server. 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/"); 
     request.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 

     // This example assumes the FTP site uses anonymous logon. 
     request.Credentials = new NetworkCredential ("anonymous","[email protected]"); 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

     Stream responseStream = response.GetResponseStream(); 
     StreamReader reader = new StreamReader(responseStream); 
     Console.WriteLine(reader.ReadToEnd()); 

     Console.WriteLine("Directory List Complete, status {0}", response.StatusDescription); 

     reader.Close(); 
     response.Close(); 
    } 
} 

MSDN

+0

我會使用NameSearchCondition( 「*。*」,SearchConditionFileTypes.Directory)作爲[最終FTP]的檢索條件參數ListDirectory方法(http://www.componentpro.com/ftp.net/) 。看到這個例子:http://www.componentpro.com/doc/ftp/ComponentPro.Net.Ftp.ListDirectory%28ComponentPro.IO.SearchCondition%29.htm – Peter 2014-12-23 14:20:17

回答

42

試試這個:

FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri); 
ftpRequest.Credentials =new NetworkCredential("anonymous","[email protected]"); 
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; 
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse(); 
StreamReader streamReader = new StreamReader(response.GetResponseStream()); 

List<string> directories = new List<string>(); 

string line = streamReader.ReadLine(); 
while (!string.IsNullOrEmpty(line)) 
{ 
    directories.Add(line); 
    line = streamReader.ReadLine(); 
} 

streamReader.Close(); 

它給了我...目錄中的所有目錄字符串列表中列出的名單......告訴我,如果這是你需要什麼樣的

+0

嗨, 您的代碼以XML格式返回結果我只想要遠程系統目錄,因爲我需要將該目錄名稱綁定到樹視圖。 獲取XML對我無效。 – 2010-07-21 12:21:51

+0

@swapnil我的上述代碼(我編輯)是否適合你?只是好奇 – mint 2010-07-21 17:43:52

+0

它回報我 [DIR] Swapnil。 。 。 。 。 。 。 。 。 。 。 。 。 Jul 21 09:43 其中「Swapnil」是目錄的名稱。我不想要所有其他的東西好友只是在樹狀視圖中顯示的目錄名稱。我無法在treeview中顯示所有這些細節。 任何建議或修改? – 2010-07-22 04:36:32

1

您可能正在尋找PrintWorkingDirectory

+2

PWD只是打印工作目錄的名稱 – 2010-07-21 12:17:30

+0

當我使用PrintWorkingDirectory它給我錯誤: 「請求的FTP命令不支持使用HTTP代理時」 FtpWebRequest ftpRequest =(FtpWebRequest)WebRequest.Create(uri); ftpRequest.Credentials = new NetworkCredential(「...」,「...」); ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; FtpWebResponse response =(FtpWebResponse)ftpRequest.GetResponse(); //錯誤 StreamReader streamReader = new StreamReader(response.GetResponseStream()); String sResult = streamReader.ReadToEnd(); streamReader。關(); – 2010-07-21 12:20:46

+0

@Kieren Johnstone:這就是我所理解的他想要的...... – leppie 2010-07-21 12:26:10

1

你需要ListDirectory列出目錄內容

編輯:或者你可以用這個Chilkat庫,包裝起來很好給你

+0

ListDirectory也以XML格式列出結果。 我只想要遠程系統目錄,因爲我需要將該目錄名稱綁定到樹視圖。獲取XML不適合我。 謝謝。 – 2010-07-21 12:22:45

+0

雅我經歷了奇爾卡特圖書館,但我不想使用任何第三方。 謝謝。 你有什麼建議嗎? – 2010-07-21 12:24:06

+0

我不認爲它會返回任何東西,但XML,但我可能是錯的。除非可以指定httpwebresponse返回純文本,否則可能只需將xml解析爲文本? – w69rdy 2010-07-21 12:48:46

1

有些代理格式化目錄列表,所以很難解析目錄列表可靠,除非你可以保證代理不會改變

-1

如果你想列出de目錄內的文件的名稱,你必須把 (reqFTP.Proxy = null;)在調用之前(reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;)。

希望這能幫助你!

0

簡單,最有效的方式來獲取FTP目錄內容:

VAR內容= GetFtpDirectoryContents(新的URI( 「ftpDirectoryUri」),新的NetworkCredential( 「username」 的 「密碼」));

​​