2016-06-08 40 views
3

我正在使用FTP將文件上載到FTP服務器文件夾上的文件夾,但首先我需要確定該文件夾是否存在。 MSDN包含how to use FtpWebResponse一個例子來檢查,如果一個文件夾存在:使用FtpWebRequest查找FTP服務器的子文件夾

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

使用上面的代碼,我們可以得到一個文件夾列表關閉服務器的根目錄下,我可以在我自己的情況做到這一點。這不是我的問題。

我的問題是,如果我想要寫入的文件夾是由調用ListDirectoryDe​​tails導致的文件夾之一的SUBFOLDER?我如何深入挖掘文件夾結構?

+1

可能重複[如何檢查FTP目錄是否存在](http://stackoverflow.com/questions/2769137/how-to-check-if-an-ftp-directory-exists) –

+0

@MartinPrikryl,the問題的原始文本清楚地表明,我已經知道如何檢查FTP目錄是否存在。我已經改變了這個問題,使它更加清晰,我的問題是詢問如何檢查一個根子文件夾的子文件夾的存在。 – Cyberherbalist

+0

不,你的代碼不檢查,如果有任何目錄存在,它只是列出一個根目錄。如果某個目錄存在,請查看鏈接問題的答案以查看實際代碼。 –

回答

2

你可以試試這個:

try 
{ 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://address/subfolder/subfolder"); 
    request.Method = WebRequestMethods.Ftp.ListDirectory; 
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
    { 
     // Directory exists, you can work on it. 
    } 
} 
catch (WebException ex) 
{ 
    if (ex.Response != null) 
    { 
     FtpWebResponse response = (FtpWebResponse)ex.Response; 
     if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) 
     { 
      // Directory not found. 
     } 
    } 
} 

通過這種方式,你基本上是檢查是否可以通過調用Ftp.ListDirectory作爲FTP請求方法列出目錄。如果失敗,那麼你的目錄不存在。

+0

這樣做。我的問題是,服務器有一個名爲「FTPDATA」的公共共享文件夾,這是最高的可見文件夾 - 當我將它的名字包含在路徑中時,它找不到它。這顯然是因爲它被解釋爲根文件夾,名稱被忽略。將「FTPDATA」留在路徑之外使我能夠找到子文件夾。 – Cyberherbalist

+0

我很高興有幫助:) –

1

假設您想使用子文件夾temp。然後,您必須將文件夾附加到您的URI,如下所示:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/temp/somefile.xyz"); 

通過這種方式,您可以訪問子文件夾,子文件夾等。

+0

這只是顯示如何構建在某個目錄中訪問文件的路徑,而不是如何檢查它是否存在。 –

相關問題