/// <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. 大规模数据导入和导出(sqlserver)

    请期待... https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#RHEL msodbcsql-13.1.6 ...

  2. 大规模数据导入和导出(oracle)

    请期待... http://www.cnblogs.com/xwdreamer/archive/2012/06/08/2541678.html Oracle sqlldr的用法 (这个最完整) htt ...

  3. vs不自动退出控制台程序的办法

    1.在主函数rerurn 前加上getchar();即可. 2.ctrl+F5;

  4. (6)设计一个TimeMap

    一.描述 设计一个TimeMap,基于key value的 支持两类操作set(string key, string value, int timestamp),get(string key, int ...

  5. nginx 相关命令

    验证配置是否正确: nginx -t 查看Nginx的版本号:nginx -V 启动Nginx:start nginx 快速停止或关闭Nginx:nginx -s stop 正常停止或关闭Nginx: ...

  6. [C++]基于Curses库的实时系统监测可视化系统-2017-12-09 15-07-42

    Congratulations 0.0 技术记录 [1]  [C++]Linux之Ubuntu下编译C程序出现错误:“ stray ‘\302'或者'\240' in program”的解决方案 [2 ...

  7. Coursera, Deep Learning 1, Neural Networks and Deep Learning - week4, Deep Neural Networks

    Deep Neural Network Getting your matrix dimention right 选hyper-pamameter 完全是凭经验 补充阅读: cost 函数的计算公式: ...

  8. Ubuntu 使用 Android Studio 编译 TensorFlow android demo

    https://www.cnblogs.com/dyufei/p/8028218.html https://www.myboxlab.com/topic/detail/714ca2d405414f13 ...

  9. 第27月第10天 cmake

    1.error: tool 'xcodebuild' requires Xcode的解决办法 sudo xcode-select --switch /Applications/Xcode.app/Co ...

  10. 【tmos】SpringBoot项目IDEA不识别依赖,但是能够运行时什么鬼?

    如下图,但是项目却能够正常运行 解决方法 方法1 方法2 方法3 删除项目的.idea文件,然后重新打开IDEA 方法4 删除项目的iml文件,然后reimport项目的pom.xml 文件,错误提示 ...