C# 使用FtpWebRequest查找FTP服务器的子文件夹

C# 使用FtpWebRequest查找FTP服务器的子文件夹,c#,ftp,ftpwebrequest,C#,Ftp,Ftpwebrequest,我正在使用FTP将文件上载到FTP服务器文件夹上的文件夹,但首先我需要确定该文件夹是否存在。MSDN包含用于检查文件夹是否存在的示例: public class WebRequestGetExample { public static void Main () { // Get the object used to communicate with the server. FtpWebRequest request = (FtpWebRequest

我正在使用FTP将文件上载到FTP服务器文件夹上的文件夹,但首先我需要确定该文件夹是否存在。MSDN包含用于检查文件夹是否存在的示例:

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","janeDoe@contoso.com");

        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();
    }
}
使用上面的代码,可以从服务器的根级别获取文件夹列表,我可以在自己的情况下这样做。这不是我的问题


我的问题是,如果我要写入的文件夹是调用ListDirectoryDetails后生成的其中一个文件夹的子文件夹,该怎么办?如何深入挖掘文件夹结构?

假设您想使用子文件夹
temp
。然后,您必须将文件夹附加到URI中,如下所示:

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/temp/somefile.xyz");
通过这种方式,您可以访问子文件夹、子子文件夹等。

您可以尝试以下方法:

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请求方法来检查是否可以列出目录。如果失败,那么您的目录就不存在。

@MartinPrikryl,问题的原始文本清楚地表明,我已经知道如何检查FTP目录是否存在。我已经更改了问题,以便更清楚地表明我的问题是如何检查其中一个根子文件夹的子文件夹是否存在。不,您的代码不检查,如果存在任何目录,它只列出一个根目录。如果存在某个目录,请参阅链接问题的答案,以获取要检查的实际代码。对不起,@MartinPrikryl,链接问题的答案在某些情况下无法正常工作,并且在捕获异常的同时尝试创建文件夹在任何情况下都不是一个好方法。我下面的一个答案也为我澄清了这一点。我们还在讨论服务器上处理一个共享文件夹,这使问题变得复杂。这只是展示了如何构建路径来访问某个目录下的文件,而不是如何检查它是否存在。这样做了。我的问题是服务器有一个名为“FTPDATA”的公共共享文件夹,这是可见的最高文件夹——当我将其名称包含在路径中时,它找不到它。这显然是因为它被解释为根文件夹,名称被忽略。将“FTPDATA”保留在路径之外使我能够找到子文件夹。我很高兴能够提供帮助:)不仅您回答了重复的问题,而且没有投票将其作为重复问题关闭。但是你已经发布了与重复问题相同的答案,没有给予任何信任。