使用 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();
}
}
使用上面的代码,可以获得服务器根目录下的文件夹列表,我可以根据自己的情况执行此操作。那不是我的问题。
我的问题是,如果我要写入的文件夹是调用 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 请求方法来列出目录。如果失败,那么你的目录不存在。
我正在使用 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 产生的文件夹之一的子文件夹怎么办?如何深入了解文件夹结构?
假设您要使用子文件夹 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 请求方法来列出目录。如果失败,那么你的目录不存在。