我使用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();
}
}
使用上面的代码,可以从服务器的根级别获取文件夹列表,我可以在我自己的情况下执行此操作。那不是我的问题。
我的问题是,如果我想要写入的文件夹是由ListDirectoryDetails调用产生的其中一个文件夹的SUBFOLDER怎么办?如何深入挖掘文件夹结构?
答案 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请求方法来检查是否可以列出目录。如果失败,则您的目录不存在。