关于C#连接FTP时路径问题的解决方法
作者:菜鸟葫芦娃 发布时间:2021-10-03 18:53:50
标签:c#,ftp,路径
前言
本文主要给大家介绍了关于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


猜你喜欢
- Spring @Async无法实现异步问题原因项目中存在2个配置文件:springMVC.xml和beanDefines.xml,它们都配置
- 本文给大家分享Android里应用版本更新功能这一块的实现。一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更
- 1、前言  原先的页面访问地址为:http://127.0.0.1:8888/office/schdul
- 使用springboot创建多module项目,以前也做过多次,一段时间不用又忘了,在这里做个记录项目名称作用说明demo-root根项目父
- 本文实例讲述了DevExpress设置饼状图的Lable位置的方法。分享给大家供大家参考。具体实现方法如下:关键代码如下:/// <s
- 一、创建资源文件可以将字符串、图像或对象数据等资源包含在资源文件中,方便应用程序使用。创建资源文件的方法:1、手动或使用IDE工具自动生成X
- 最近项目中用到的两种文件上传方式做一下总结:一. uploadify:uploadify控件的scripts和styles在这里:图片上传J
- 以上是集成测试后的Jprofiler演示效果图今晚想在IDEA中集成一下JProfiler11(现在有12版本了)工具,去网上看了下都是老版
- 一、Flow的基本概念Kotlin 的 Flow 相信大家都或多或少使用过,毕竟目前比较火,目前我把Flow的使用整理了一下。希望和大家所学
- 前言好几天没写了,工作有点忙,最近工作刚好做一个定时任务统计的,所以就将springboot 如何创建定时任务整理了一下。总的来说,spri
- 前言JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名。为了解决ZIP
- 这是一个可以从乱码文本中得到正确的原始文本的程序,其基于的原理在于错误的编码往往导致位补充,因此正确的文本使用的字节数应该是最少的(之一)。
- 最近做的一个小项目中有这样的需求:整个项目有一份config.json保存着项目的一些配置,是存储在本地文件的一个资源,并且应用中存在读写(
- Android用SharedPreferences实现登录注册注销功能前言本文用SharedPreferences本地缓存账号信息来实现登录
- 本文实例为大家分享了java统计文件中字符个数的具体代码,供大家参考,具体内容如下package com.zhu.io;import jav
- 本文实例为大家分享了Android ViewPager指示器的制作方法,供大家参考,具体内容如下1.概述ViewPageIndicator这
- 这篇文章主要介绍了springboot跨域CORS处理代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 相对于Swing来说,JavaFX在UI上改善了很多,不仅可以通过FXML来排版布局界面,同时也可以通过CSS样式表来美化UI。其实在开发J
- 一、No serializer found for class org.hibernate.proxy.pojo.bytebuddy.Byt
- Springboot 内置tomcat禁止不安全HTTP方法1、在tomcat的web.xml中可以配置如下内容让tomcat禁止不安全的H