2016-06-08 36 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

这只是显示如何构建在某个目录中访问文件的路径,而不是如何检查它是否存在。 –

相关问题