ftp_get_file_and_directory
- class DirectoryItem
- {
- public Uri BaseUri;
- public string AbsolutePath
- { get { return string.Format("{0}/{1}", BaseUri, Name); } }
- public DateTime DateCreated;
- public bool IsDirectory;
- public string Name;
- public List<DirectoryItem> Items;
- public override string ToString() { return Name; }
- }
- internal enum enumFolderListFMT { UNIX, DOS_IIS };
- internal enum enumFTPPlatform { WindowsServer2008, ServU}
- /// <summary>
- /// 获取目录信息(包含文件夹,文件)
- /// </summary>
- /// <param name="address"></param>
- /// <param name="username"></param>
- /// <param name="password"></param>
- /// <returns></returns>
- static List<DirectoryItem> GetDirectoryInformation(string addr2, string username, string password)
- {
- var address = addr2.EndsWith("/") ? addr2.Substring(, addr2.Length - ) : addr2;//去除最后一个斜杠
- FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(address);
- request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- request.Credentials = new NetworkCredential(username, password);
- request.UsePassive = true;
- request.UseBinary = true;
- request.KeepAlive = false;
- string[] list = null;
- using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
- using (StreamReader reader = new StreamReader(response.GetResponseStream()))
- {
- list = reader.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
- }
- //unix or dos_iis format?
- enumFolderListFMT folderFormat = enumFolderListFMT.UNIX;
- int dir_pos = ;
- bool found = false;
- foreach (var item in list)
- {
- if (item.ToLower().Contains("<dir>"))
- {
- folderFormat = enumFolderListFMT.DOS_IIS;
- dir_pos = item.ToLower().IndexOf("<dir>");
- found = true;
- break;
- }
- }
- if (!found && list.Length > && list[].ToLower()[] != 'd' && list[].ToLower()[] != '-')
- {
- folderFormat = enumFolderListFMT.DOS_IIS;
- }
- enumFTPPlatform ftpPlatform = enumFTPPlatform.WindowsServer2008;
- if (folderFormat == enumFolderListFMT.UNIX)
- {
- if (list.Length > && list[].Substring(, ).ToLower().Count(c => c == '-') < )
- ftpPlatform = enumFTPPlatform.WindowsServer2008;
- else
- ftpPlatform = enumFTPPlatform.ServU;
- }
- List<DirectoryItem> returnValue = new List<DirectoryItem>();
- if (folderFormat == enumFolderListFMT.DOS_IIS)
- {
- foreach (var item in list)
- {
- if (item.ToLower().Contains("<dir>"))
- {
- var dir = item.Substring(dir_pos + ).Trim();
- if (dir == "." || dir == "..") continue;
- var di = new DirectoryItem();
- di.BaseUri = new Uri(address);
- //di.DateCreated = dateTime;
- di.IsDirectory = true;
- di.Name = dir;
- //Debug.WriteLine(di.AbsolutePath);
- di.Items = GetDirectoryInformation(di.AbsolutePath, username, password);
- returnValue.Add(di);
- }
- else
- {
- string filename = "";
- if(found)
- filename = item.Substring(dir_pos + ).Trim();
- else
- filename = item.Substring().Trim();
- var di = new DirectoryItem();
- di.BaseUri = new Uri(address);
- di.IsDirectory = false;
- di.Name = filename;
- di.Items = null;
- returnValue.Add(di);
- }
- }
- }
- else if (folderFormat == enumFolderListFMT.UNIX)
- {
- var pos = ftpPlatform == enumFTPPlatform.WindowsServer2008 ? : ;
- foreach (var item in list)
- {
- if (item.Substring(, ).ToLower() == "d")
- {
- var dir = item.Substring(pos).Trim();
- if (dir == "." || dir == "..") continue;
- var di = new DirectoryItem();
- di.BaseUri = new Uri(address);
- di.IsDirectory = true;
- di.Name = dir;
- di.Items = GetDirectoryInformation(di.AbsolutePath, username, password);
- returnValue.Add(di);
- }
- else if (item.Substring(, ).ToLower() == "-")
- {
- var filename = item.Substring(pos).Trim();
- var di = new DirectoryItem();
- di.BaseUri = new Uri(address);
- di.IsDirectory = false;
- di.Name = filename;
- di.Items = null;
- returnValue.Add(di);
- }
- }
- }
- return returnValue;
- }
- /// <summary>
- /// 下载文件
- /// </summary>
- /// <param name="filePath">下载到哪里</param>
- /// <param name="outputFilename">下载后的文件名</param>
- /// <param name="fileName">服务器上的文件名</param>
- /// <param name="ftpServerIP">服务器全路径,注意最后的斜线不可少。如ftp://172.18.1.152:8009/aaa/</param>
- /// <param name="ftpUserID">访问的用户名</param>
- /// <param name="ftpPassword">访问的密码</param>
- /// <returns></returns>
- public int DownloadFile(string filePath, string outputFilename, string fileName, string ftpServerIP, string ftpUserID, string ftpPassword)
- {
- FtpWebRequest reqFTP;
- try
- {
- //filePath = < <The full path where the file is to be created.>>,
- //fileName = < <Name of the file to be created(Need not be the name of the file on FTP server).>>
- FileStream outputStream = new FileStream(filePath + "\\" + outputFilename, FileMode.Create);
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP + fileName));
- reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
- reqFTP.UseBinary = true;
- reqFTP.KeepAlive = false;
- reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- long cl = response.ContentLength;
- int bufferSize = ;
- int readCount;
- byte[] buffer = new byte[bufferSize];
- readCount = ftpStream.Read(buffer, , bufferSize);
- while (readCount > )
- {
- outputStream.Write(buffer, , readCount);
- readCount = ftpStream.Read(buffer, , bufferSize);
- }
- ftpStream.Close();
- outputStream.Close();
- response.Close();
- return ;
- }
- catch (Exception ex)
- {
- // Logging.WriteError(ex.Message + ex.StackTrace);
- System.Windows.Forms.MessageBox.Show(ex.Message);
- return -;
- }
- }
get_directory_file_download
ftp_get_file_and_directory的更多相关文章
随机推荐
- Django: 之数据库导入、迁移和联用
Django 数据库导入 从网上下载的一些数据,excel表格,xml文件,txt文件等有时候我们想把它导入数据库,应该如何操作呢? 以下操作符合 Django版本为 1.6 ,兼顾 Django 1 ...
- 性能更好的js动画实现方式---requestAnimationFrame
用js来实现动画,我们一般是借助setTimeout或setInterval这两个函数,css3动画出来后,我们又可以使用css3来实现动画了,而且性能和流畅度也得到了很大的提升.但是css3动画还是 ...
- stock 财务 指标
净资产收益率:"不能比利率低"每股收益是烟幕弹 有一点需要提请大家注意,观察净资产收益率至少要看过去三年的指标,如果公司没有经过大的资产重组,最好看看自其上市以来每一年的净资产收益 ...
- [转] Linux下移动virtualbox虚拟硬盘丢失eth0
1.遇到什么的问题(What) 在新的virtualbox虚拟机上挂上曾使用过的虚拟硬盘,在启动的时候,发现找不到网卡eth0, 在输入ifconfig –a的时候,也没有任何Ethnet的 ...
- 总结OpenWrt系统基本操作方法
1.OpenWrt系统编译好的固件位于哪个文件夹?root@ald888:/work/openwrt/trunk/bin/ramips# lsopenwrt-ramips-rt305x-mpr-a2- ...
- PAT (Advanced Level) 1052. Linked List Sorting (25)
简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...
- 【BZOJ 1579】 1579: [Usaco2009 Feb]Revamping Trails 道路升级 (最短路)
1579: [Usaco2009 Feb]Revamping Trails 道路升级 Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M< ...
- java实现webservice
第一步:web工程--新建server-config.wsdd 文件与web.xml同级 其内容如下 <?xml version="1.0" encoding="U ...
- 基于Verilog HDL的ADC0809CCN数据采样
本实验是用ADC0809CCN进行数据采样,并用7段数码管进行显示. ADC0809由一个8路模拟开关.一个地址锁存与译码器.一个A/D转换器和一个三态输出锁存器组成.多路开关可选通8个模拟通道,允许 ...
- 关于js的几道经典题(作用域、原型链等)自己做的
1. function test() { var a = 1; setTimeout(function() { alert(a); a = 3; }, 1000); a = 2; setTimeout ...