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

Using FtpWebRequest to find subfolder of FTP server

我正在使用 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 产生的文件夹之一的子文件夹怎么办?如何深入了解文件夹结构?

假设您要使用子文件夹 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 请求方法来列出目录。如果失败,那么你的目录不存在。