如何检查服务器上是否存在某个DIR? 虽然我可以通过以下方式检查文件是否存在:
try
{
FtpWebRequest request=null;
request = (FtpWebRequest)WebRequest.Create("ftp://" + webrequestUrl + "/somefile.txt");
request.Credentials = new NetworkCredential(username, password);
request.Method = WebRequestMethods.Ftp.ListDirectory;
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
// Okay.
}
}
catch (WebException ex)
{
if (ex.Response != null)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
{
//task
}
}
}
但我该如何检查DIR?如果我只在URI中指定DIR,那么如果DIR不存在则不会捕获。
答案 0 :(得分:2)
request = (FtpWebRequest)WebRequest.Create("ftp://" + webrequestUrl); //no file name
request.Credentials = new NetworkCredential(username, password);
myFtpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
并检查您的文件/目录是否已列出。
您需要查询响应,它应包含可能的文件和导演列表。
您不应该使用catch来处理程序流。 MSDN example
答案 1 :(得分:0)
我认为代码不符合您的想法。
据我所知,您正在尝试为文件获取ls
(在DOS / Windows中认为dir
,目录中的文件列表)。这没有意义。它在某种程度上有效,因为您在尝试访问目录“somefile.txt”时遇到异常。
您应该能够通过查看父级的ListDirectory响应的输出以正确的方式(tm)执行此操作:
执行ListDirectory ftp://yourserver/
并检查是否
。
答案 2 :(得分:0)
我用:
private bool CreateFTPDirectory(string directory)
{
try
{
//create the directory
FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri(FtpURI+"/"+directory));
requestDir.Method = WebRequestMethods.Ftp.MakeDirectory;
requestDir.UsePassive = true;
requestDir.UseBinary = true;
requestDir.KeepAlive = false;
//requestDir.UseDefaultCredentials = true;
requestDir.Credentials = new NetworkCredential(UserId, Password);
requestDir.Proxy = WebRequest.DefaultWebProxy;
requestDir.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse();
Stream ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
return true;
}
catch (WebException ex)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if ((response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) || (((int)response.StatusCode)==521))
{
response.Close();
return true;
}
else
{
response.Close();
return false;
}
}
}
这也有创建目录的副作用。如果它已经存在,则返回521结果,该结果未在.NET Enum中定义。
当您连接到FTP服务器时,您可以将Uri指定为“ftp // ftp.domain.com / somedirectory”,但这会转换为:“ftp://ftp.domain.com/homedirectoryforftp/somedirectory”。为了能够定义完整的根目录,请使用“ftp://ftp.domain.com//somedirectory”,它转换为机器上的某个目录。
答案 3 :(得分:0)
private void ftp_folder_IsExists()
{
FTPClient ftp = default(FTPClient);
ftp = new FTPClient("ftp_host_name_here"); // ex.:- no need to use ftp in the host name, provide name only
ftp.Login("username", "password");
string[] file_and_folders = ftp.Dir(".", false);// . is used to get all the [files and folders] in the root of FTP
string[] file_and_folders_1 = ftp.Dir("MyFolder", false);// this will get all the [files and folder] inside MyFolder (ex. ftp.ahostname.com/MyFolder/)
//checking for a FILE
if (file_and_folders.Contains("something.txt")) {
//Do what you want..
} else {
//Do what you want..
}
//checking for a FOLDER
if (file_and_folders.Contains("A_Folder")) {
//Do what you want..
} else {
//Do what you want..
}
}
注意:在VB.NET中编写并使用http://converter.telerik.com/
转换的代码