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

时间:2016-06-08 15:37:25

标签: c# ftp ftpwebrequest

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

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

使用上面的代码,可以从服务器的根级别获取文件夹列表,我可以在我自己的情况下执行此操作。那不是我的问题。

我的问题是,如果我想要写入的文件夹是由ListDirectoryDe​​tails调用产生的其中一个文件夹的SUBFOLDER怎么办?如何深入挖掘文件夹结构?

2 个答案:

答案 0 :(得分:1)

我们假设您要使用子文件夹temp。然后你必须将文件夹附加到你的URI:

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

通过这种方式,您可以访问子文件夹,子文件夹等。

答案 1 :(得分:1)

你可以试试这个:

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