关于C#连接FTP时路径问题的解决方法
作者:菜鸟葫芦娃 时间:2021-10-03 18:53:50
前言
本文主要给大家介绍了关于C#连接FTP时路径问题的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍:
今天在开发项目时,需要连接FTP获取文件,其中关键的一步就是判断能否连接FTP以及FTP上的文件是否存在
判断的代码如下:
/// <summary>
/// 测试是否可以成功连接FTP和判断文件是否存在
/// </summary>
/// <param name="ftpServerFilePath">FTP上文件地址</param>
/// <param name="ftpUserId">FTP登陆用户名</param>
/// <param name="ftpPwd">FTP登陆密码</param>
/// <param name="errorMsg">返回错误消息</param>
/// <returns></returns>
private bool IsCanConnectFtp(string ftpServerFilePath, string ftpUserId, string ftpPwd, out string errorMsg)
{
bool flag = true;
FtpWebResponse ftpResponse = null;
FtpWebRequest ftpRequest = null;
errorMsg = string.Empty;
try
{
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerFilePath));
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpRequest.Timeout = 2 * 1000;//超时时间设置为2秒。
ftpRequest.Credentials = new NetworkCredential(ftpUserId, ftpPwd);
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
}
catch (WebException exception)
{
ftpResponse = (FtpWebResponse)exception.Response;
switch (ftpResponse.StatusCode)
{
case FtpStatusCode.ActionNotTakenFileUnavailable:
errorMsg = "下载的文件不存在";
break;
case FtpStatusCode.ActionNotTakenFileUnavailableOrBusy:
errorMsg = "下载的文件正在使用,请稍后再试";
break;
default:
errorMsg = "发生未知错误";
break;
}
flag = false;
}
catch
{
errorMsg = "网络连接发生错误,请稍后再试";
flag = true;
}
finally
{
if (ftpResponse != null)
{
ftpResponse.Close();
}
}
return flag;
}
当 ftpServerFilePath 的路径为 “127.0.0.1\1.doc”, 这样进行传参时,就会抛异常,异常内容为无效的URi,如下图
解决方法
这是因为FtpWebRequest.Create
连接时不能识别'\' 这样的文件路径标识符,才会抛出上面的异常,因此传入的参数应该为”127.0.0.1/1.doc”。或者在方法里面进行替换。代码如下所示:
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerFilePath.Replace("\\","/")));
这样就不会跑异常,至于能否连接或者文件是否存在,请自行查看连接
https://msdn.microsoft.com/zh-cn/library/system.net.ftpstatuscode(v=vs.110).aspx
或者自行 google FtpStatusCode 即可。
那么修改后的代码为:(关于C# 连接完整的FTP 可以仔细 google 查询,网上多的是,这样就不累述了)
/// <summary>
/// 测试是否可以成功连接FTP和判断文件是否存在
/// </summary>
/// <param name="ftpServerFilePath">FTP上文件地址</param>
/// <param name="ftpUserId">FTP登陆用户名</param>
/// <param name="ftpPwd">FTP登陆密码</param>
/// <param name="errorMsg">返回错误消息</param>
/// <returns></returns>
private bool IsCanConnectFtp(string ftpServerFilePath, string ftpUserId, string ftpPwd, out string errorMsg)
{
bool flag = true;
FtpWebResponse ftpResponse = null;
FtpWebRequest ftpRequest = null;
errorMsg = string.Empty;
try
{
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerFilePath.Replace("\\","/")));
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpRequest.Timeout = 2 * 1000;//超时时间设置为2秒。
ftpRequest.Credentials = new NetworkCredential(ftpUserId, ftpPwd);
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
}
catch (WebException exception)
{
ftpResponse = (FtpWebResponse)exception.Response;
switch (ftpResponse.StatusCode)
{
case FtpStatusCode.ActionNotTakenFileUnavailable:
errorMsg = "下载的文件不存在";
break;
case FtpStatusCode.ActionNotTakenFileUnavailableOrBusy:
errorMsg = "下载的文件正在使用,请稍后再试";
break;
default:
errorMsg = "发生未知错误";
break;
}
flag = false;
}
catch
{
errorMsg = "网络连接发生错误,请稍后再试";
flag = true;
}
finally
{
if (ftpResponse != null)
{
ftpResponse.Close();
}
}
return flag;
}
来源:http://blog.csdn.net/u010533180/article/details/51697353
标签:c#,ftp,路径
0
投稿
猜你喜欢
MyBatis逆向工程基本操作及代码实例
2022-12-19 04:09:27
JAVA发送http get/post请求,调用http接口、方法详解
2021-11-02 16:41:19
Mybatis条件if test如何使用枚举值
2023-11-19 14:15:33
如何解决android Toast重复显示
2023-08-19 00:36:56
Spring Boot和Thymeleaf整合结合JPA实现分页效果(实例代码)
2023-11-25 07:05:15
Java中简单实用Quartz概述
2021-09-09 14:16:30
mybatis中使用大于小于等于的正确方法
2021-10-09 03:52:56
Java加载property文件配置过程解析
2023-10-07 07:53:03
SQLite在C#中的安装与操作技巧
2023-04-19 08:31:12
AndroidUI组件SlidingTabLayout实现ViewPager页滑动效果
2023-05-17 14:28:22
java中String.intern()方法功能介绍
2023-11-25 23:49:21
C# 基于TCP 实现扫描指定ip端口的方式示例
2021-11-28 07:55:24
C#之WinForm跨线程访问控件实例
2023-11-20 19:05:13
详解Unity安卓共享纹理
2022-07-10 08:18:21
详解Java多态对象的类型转换与动态绑定
2021-10-12 06:59:59
Mybatis动态SQL foreach标签用法实例
2023-12-25 07:42:46
C# MVC 使用LayUI实现下拉框二级联动的功能
2022-12-07 02:10:05
c# 以二进制读取文本文件
2023-02-28 15:23:26
Java8时间api之LocalDate/LocalDateTime的用法详解
2023-11-10 16:14:43
Android中用onSaveInstanceState保存Fragment状态的方法
2022-05-16 00:39:44