• 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(0, addr2.Length - 1) : 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[] { "
    " }, StringSplitOptions.RemoveEmptyEntries);
                }
    
                //unix or dos_iis format?
                enumFolderListFMT folderFormat = enumFolderListFMT.UNIX;
                int dir_pos = 0;
                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 > 0 && list[0].ToLower()[0] != 'd' && list[0].ToLower()[0] != '-')
                {
                    folderFormat = enumFolderListFMT.DOS_IIS;
                }
    
                enumFTPPlatform ftpPlatform = enumFTPPlatform.WindowsServer2008;
                if (folderFormat == enumFolderListFMT.UNIX)
                {
                    if (list.Length > 0 && list[0].Substring(0, 10).ToLower().Count(c => c == '-') < 3)
                        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 + 5).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 + 14).Trim();
                            else
                                filename = item.Substring(39).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 ? 58 : 54;
                    foreach (var item in list)
                    {
                        if (item.Substring(0, 1).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(0, 1).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 = 2048;
                    int readCount;
                    byte[] buffer = new byte[bufferSize];
    
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                    while (readCount > 0)
                    {
                        outputStream.Write(buffer, 0, readCount);
                        readCount = ftpStream.Read(buffer, 0, bufferSize);
                    }
                    ftpStream.Close();
                    outputStream.Close();
                    response.Close();
                    return 0;
                }
                catch (Exception ex)
                {
                    // Logging.WriteError(ex.Message + ex.StackTrace);
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                    return -2;
                }
            }
    get_directory_file_download
  • 相关阅读:
    11g SPA (sql Performance Analyze) 进行升级测试
    SPA游标采集之去除重复
    C++ 实现分数的四则运算
    计算两个数的最大公约数和最小公倍数(欧几里得算法)
    计算a月的第b个星期c
    完数问题
    求整数的最大质因子
    C++ 读取文本文件内容到结构体数组中并排序
    月饼问题PAT B1020(贪心算法)
    路径打印(set以及字符串的相关操作)
  • 原文地址:https://www.cnblogs.com/yansc/p/6275671.html
Copyright © 2020-2023  润新知