/// <summary>
/// 判断ftp上是否有指定的文件目录,没有创建
/// </summary>
/// <param name="ftpPath">指定路径</param>
public void FtpDirectoryAndFile(string ftpPath)
{
int start = "ftp://192.168.1.198:21/".Length;
int end = ftpPath.LastIndexOf("/") - start;
string fullDir = ftpPath.Substring(start, end);

string[] dirs = fullDir.Split('/');
if (dirs != null && dirs.Length > 0)
{
string curDir = "ftp://192.168.1.198:21/";
for (int i = 0; i < dirs.Length; i++)
{
string dir = dirs[i];
if (dir != null && dir.Length > 0)
{
bool isContained = FtpDirIsExists(curDir, dir);
if (isContained)
{
curDir += dir + "/";
continue;
}
else
{
FtpMakeDir(curDir + dir);
curDir += dir + "/";
}
}
}
}
}

/// <summary>
/// 判断ftp上的文件目录是否存在
/// </summary>
/// <param name="dirName">要判断的ftp上的文件目录路径</param>
/// <param name="folderName">ftp上的文件目录路径中是否包含该文件夹名称</param>
/// <returns>true 包含,false 不包含</returns>
public static bool FtpDirIsExists(string dirName, string folderName)
{
//string url = "ftp://" + FtpServerIP + "/" + dirName;
FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create(new Uri(dirName));
ftpWebRequest.UseBinary = true;
ftpWebRequest.Credentials = new NetworkCredential("www", "wwwjs");
ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory;
StreamReader streamReader = null;
Stream responseStream = null;
bool isContained = false;
try
{
using (FtpWebResponse ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse())
{
responseStream = ftpWebResponse.GetResponseStream();
streamReader = new StreamReader(responseStream);
string nameList = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
string[] nameArr = nameList.Replace("\r\n", "#").Split(new string[] { "#"}, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < nameArr.Length; i++)
{
if (nameArr[i].Equals(folderName))
{
isContained= true;
break;
}
}
return isContained;
}
}
catch (Exception ex)
{
if (streamReader != null)
{
streamReader.Close();
}
if (responseStream != null)
{
responseStream.Close();
}

return false;
}
}

/// <summary>
/// 在FTP上创建目录
/// </summary>
/// <param name="dirName">要创建的目录名</param>
public bool FtpMakeDir(string dirName)
{
FtpWebResponse response = null;
StreamReader reader = null;
try
{
//string uri = FtpServerIP + DateTime.Now.ToString("yyyyMMddHHmmss") + fileInfo.Name;
FtpWebRequest reqFTP = (FtpWebRequest)WebRequest.Create(new Uri(dirName));
reqFTP.Credentials = new NetworkCredential("www", "wwwjs");
//reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary = true;
response = (FtpWebResponse)reqFTP.GetResponse();
reader = new StreamReader(response.GetResponseStream());
string returnValue = reader.ReadToEnd();
response.Close();
reader.Close();
return true;
}
catch (Exception ex)
{

if (response != null)
{
response.Close();
}
if (reader != null)
{
reader.Close();
}
return false;
}

}

测试代码如下

string ss = "ftp://192.168.1.198:21/2018/11/222.pdf";
FtpDirectoryAndFile(ss);
string sss = "333";

FTP判断ftp上是否有文件目录,没有就创建的具体案例的更多相关文章

  1. 判断大文件是否上传成功(一个大文件上传到ftp,判断是否上传完成)

    大文件上传ftp,不知道有没有上传完成,如果没有上传完成另一个程序去下载这个文件,导致下载不完整. 判断一个文件是否上传完成的方法: /** * 间隔一段时间去计算文件的长度来判断文件是否写入完成 * ...

  2. C#实现FTP文件的上传、下载功能、新建目录以及文件的删除

    本来这篇博文应该在上周就完成的,可无奈,最近工作比较忙,没有时间写,所以推迟到了今天.可悲的是,今天也没有太多的时间,所以决定给大家贴出源码,不做详细的分析说明,如果有不懂的,可以给我留言,我们共同讨 ...

  3. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  4. 【FTP】FTP文件上传下载-支持断点续传

    Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...

  5. ftp链接、上传、下载、断开

    开发环境:Jdk 1.8 引入第三方库:commons-net-2.2.jar(针对第一种方法) 一.基于第三方库FtpClient的FTP服务器数据传输 由于是基于第三方库,所以这里基本上没有太多要 ...

  6. ftp配置 Laravel上传文件到ftp服务器

    listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask= dirmessage_enable=YES ...

  7. 【ABAP系列】SAP ABAP 实现FTP的文件上传与下载

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 实现FTP的文 ...

  8. shell判断FTP传输是否成功

    #!/bin/bash ##判断FTP传输文件是否成功 exec 6>&1 1>/tmp/lzc.txt ##打开一个文件描述符6,保存文件描述符1的属性,然后将描述1重定向到lz ...

  9. <实训|第四天>Linux下的vim你真的掌握了吗?附上ftp远程命令上传。

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

随机推荐

  1. 关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作

    PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","",& ...

  2. Andrew NG 机器学习编程作业6 Octave

    问题描述:使用SVM(支持向量机 )实现一个垃圾邮件分类器. 在开始之前,先简单介绍一下SVM ①从逻辑回归的 cost function 到SVM 的 cost function 逻辑回归的假设函数 ...

  3. “无法找到XXX.exe的调试信息,或调试信息不匹配”解决方案

    错误信息如下: 解决方法: 选择项目属性,依次序进行如下操作. 1.选择 配置属性->链接器->调试->生成调试信息 改为 是 一般问题都是出现在这个地方,修改完了可以尝试运行,若还 ...

  4. 模拟用户登录(获取cookie/实例化session)

    第一种方法:通过本地浏览器保存的cookie进行登陆 url1 = 'https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2F ...

  5. jstl-----之<set>标签

    <table id="attachtab" border="0" cellpadding="0" cellspacing=" ...

  6. Spring+thymeleaf

    1.导入jar包 2.配置 3.标签使用 th:text th:utext th:object th:if th:switch th:case th:each="person:userlis ...

  7. Flask与mysql数据库字段类型的区别以及基本用法

    Mysql里面的int在Flask中里面使用Integer Mysql里面的varcahar在Flask中里面使用String 与Mysql数据库需要导入模块 #导入第三方链接库sql点金术 from ...

  8. 嵌入式开发平台迅为iTOP-4412开发板-ssh常见问题以及解决方法

    一.基本网络,软件安装以及配置 ssh 软件无法登陆 Ubuntu,有可能是网络不通.SSH 软件未安装.环境变量没配置.防 火墙未关闭等. 1. 网络连接 使用 ssh 传输文件的前提是网络顺畅,即 ...

  9. [转] 如何轻松愉快地理解条件随机场(CRF)?

    原文链接:https://www.jianshu.com/p/55755fc649b1 如何轻松愉快地理解条件随机场(CRF)?   理解条件随机场最好的办法就是用一个现实的例子来说明它.但是目前中文 ...

  10. Android软键盘在清单文件中所有配置含义

    android:windowSoftInputMode 活动的主窗口如何与包含屏幕上的软键盘窗口交互.这个属性的设置将会影响两件事情: 1>     软键盘的状态——是否它是隐藏或显示——当活动 ...