/// <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. 利用DNSLOG获取看不到的信息(给盲注带上眼镜)

    一.前言 本文原创作者:sucppVK,本文属i春秋原创奖励计划,未经许可禁止转载! 毕业设计总算搞得差不多了,这个心累啊.这不,完成了学校的任务,赶紧回来给蛋总交作业.今天给大家分享一个姿势吧,不是 ...

  2. 关于PHP建立数据库访问类的封装以及操作php单例模式连接数据库封装类

    建立数据库访问类的封装 <?php   class DBDA {     public $host = "localhost"; //服务器地址     public $ui ...

  3. git 出现 fatal: refusing to merge unrelated histories 错误

    git pull 失败 ,提示:fatal: refusing to merge unrelated histories 其实这个问题是因为 两个 根本不相干的 git 库, 一个是本地库, 一个是远 ...

  4. luogu P3240 [HNOI2015]实验比较

    传送门 首先根据题目条件,题目中如果是=的点可以缩起来,然后\(a<b\)连边\(a\rightarrow b\),而且所有点入度为最多1,那么判掉有环的不合法情况,题目中的依赖关系就是一颗外向 ...

  5. nginx 完成缓存清除 以及升级包的自动升级

    #!/bin/bash function cache(){ for i in `curl xxx.fe.xxx.cn/uplist.txt`;do url=`echo $i|awk -F"# ...

  6. Java基础_0311: 数据表与简单Java类映射

    数据表与简单Java类映射 现在假设有如下的关系表,现在要求实现如下的数据关联操作: 一个部门有多个雇员: 一个雇员有一个或零个领导 代码实现 class Dept { private int dep ...

  7. undefined symbol

    参考链接:  https://blog.csdn.net/shatterheart/article/details/52440149

  8. 【深入分析Java Web技术内幕】1、深入Web请求过程知识点

    如何发起一个请求 发起一盒HTTP请求的过程就是建立一个Socket通信的过程! 既然发起一个HTTP的本质就是建立一个Socket连接,那么我们完全可以模拟浏览器来发起HTTP请求,这很好实现,如H ...

  9. C - Boss Gym - 101473C (模拟)

    题目链接:https://cn.vjudge.net/contest/287775#problem/C 题目大意:给你n个人,然后m条关系,会有k次询问,每一次询问包括两种类型,第一种类型是交换两个人 ...

  10. Docker安装MySQL

    查看镜像 docker search mysql 拉取镜像 docker pull mysql:5.7 说明:5.7为指定下载的版本,可以更换其他版本 运行镜像 docker run --name m ...