首页 新闻 会员 周边

C#做FTP上传时,怎么判断 文件路径 是否存在?

0
悬赏园豆:20 [已解决问题] 解决于 2012-12-24 17:07

C# 做FTP上传时,怎么判断 FTP上  文件路径 是否存在?

老树昏鸦的主页 老树昏鸦 | 初学一级 | 园豆:10
提问于:2012-12-22 15:10
< >
分享
最佳答案
3
 1         private bool DirectoryExist(string URI)
 2         {
 3             FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(URI));
 4             reqFTP.Credentials = new NetworkCredential("", "");
 5             reqFTP.Method = WebRequestMethods.Ftp.PrintWorkingDirectory;
 6 
 7             reqFTP.UseBinary = true;
 8             try
 9             {
10                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();                
11                 response.Close();
12                 return true;
13             }
14             catch(Exception ex)
15             {
16                 string e=ex.Message;
17                 return false;
18             }
19         }
老树昏鸦 | 初学一级 |园豆:10 | 2012-12-22 17:00

你确定这个是有用的吗?为什么我执行下来,明明没有这个文件夹,缺返回的是true???

飛火流星 | 园豆:202 (菜鸟二级) | 2016-08-23 11:10
其他回答(6)
-8

File.Exists

bug_tt | 园豆:234 (菜鸟二级) | 2012-12-22 16:48
0

正是!!!!

收获园豆:20
jason2013 | 园豆:1998 (小虾三级) | 2012-12-23 10:16
0

你确定这个是有用的吗?为什么我执行下来,明明没有这个文件夹,缺返回的是true???

飛火流星 | 园豆:202 (菜鸟二级) | 2016-08-23 11:10
0

可以使用WebRequestMethods.Ftp.ListDirectory试一下,如果文件夹不存在,则line为Null

 

/// <summary>
/// 判断文件夹是否存在
/// </summary>
/// <param name="dirName"></param>
/// <returns></returns>
public static bool DirectoryIsExist(string dirName)
{
string uri = string.Format("ftp://{0}:{1}/{2}", ftpServerIP, ftpServerPort, dirName);
FtpWebRequest reqFTP;
try
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string line = reader.ReadLine();

reader.Close();
response.Close();

var result = line != null;
return result;
}
catch (Exception ex)
{
LogHelper.WriteCommonLog(dirName + "目录不存在" + ex.Message);
return false;
}
}

无忌他大爷 | 园豆:202 (菜鸟二级) | 2016-11-01 14:27
0

我也碰到这个问题,我已经解决了

/// <summary>
/// 判断文件夹是否存在
/// </summary>
/// <param name="URI"></param>
/// <param name="ftpUserID"></param>
/// <param name="ftpPassword"></param>
/// <returns></returns>
private bool DirectoryExist(string URI, string ftpUserID, string ftpPassword)
{
//hwh 20170616 修复iis设置为framework4.0的时候,ftp目录不存在时返回还是true的问题。
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(URI));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

try
{
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string line = reader.ReadLine();


if (line == null)
{
string e = "目录不存在";
return false;
}
reader.Close();
response.Close();
return true;
}
catch (Exception ex)
{
string e = ex.Message;
return false;
}
}

土拨鼠tc | 园豆:402 (菜鸟二级) | 2017-06-16 09:10
0

StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string line = reader.ReadLine();
if (line == null)
{
string e = "目录不存在";
return false;
}

这个方法不对,如果我的目录存在但是内容是空的也会造成 “line == null”

yjalter | 园豆:202 (菜鸟二级) | 2017-10-19 09:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册