zoukankan      html  css  js  c++  java
  • 下载FTP服务器所有文件

    /// <summary>
            /// 下载所有文件
            /// </summary>
            /// <param name="username">FTP用户名</param>
            /// <param name="password">FTP密码</param>
            /// <param name="ftpUrl">FTP URL</param>
            /// <param name="ftpPath">FTP 路径</param>
            /// <param name="savePath">保存路径</param>
            public static void DownLoadAllFiles(String userName, String pwd, String ftpUrl, String ftpPath, String savePath)
            {
                DownLoadFile(userName, pwd, ftpUrl, "", savePath);
            }
    
            /// <summary>
            /// 下载文件
            /// </summary>
            /// <param name="userName">FTP用户名</param>
            /// <param name="pwd">FTP密码</param>
            /// <param name="ftpUrl">FTP URL</param>
            /// <param name="ftpPath">FTP 路径</param>
            /// <param name="savePath">保存路径</param>
            private static void DownLoadFile(String userName, String pwd, String ftpUrl, String ftpPath, String savePath)
            {
                // 如果目录不存在
                if (!Directory.Exists(savePath))
                {
                    Directory.CreateDirectory(savePath);
                }
                List<String> fileNames = GetFile(userName, pwd, ftpUrl, ftpPath);
                fileNames.ForEach(file =>
                {
                    DownloadFtpFile(userName, pwd, ftpUrl + "//" + ftpPath + "//" + file, savePath, file);
                });
                // 获取所有目录
                List<String> lsDir = GetDirctory(userName, pwd, ftpUrl, ftpPath);
                lsDir.ForEach(dir =>
                {
                    DownLoadFile(userName, pwd, ftpUrl + "//" + ftpPath, dir, savePath + "//" + dir);
                });
            }
    
            /// <summary>
            ///从ftp服务器上下载文件的功能
            /// </summary>
            /// <param name="userId"></param>
            /// <param name="pwd"></param>
            /// <param name="ftpUrl">ftp地址</param>
            /// <param name="filePath"></param>
            /// <param name="fileName"></param>
            public static void DownloadFtpFile(String userId, String pwd, String ftpUrl, String filePath, String fileName)
            {
                FtpWebRequest reqFTP = null;
                FtpWebResponse response = null;
                try
                {
                    String onlyFileName = Path.GetFileName(fileName);
    
                    String downFileName = filePath + "\" + onlyFileName;
                    String url = ftpUrl;
                    if (File.Exists(downFileName))
                    {
                        //DeleteDir(downFileName);
                    }
                    // 如果目录不存在
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
    
                    FileStream outputStream = new FileStream(downFileName, FileMode.Create);
    
                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
                    reqFTP.Credentials = new NetworkCredential(userId, pwd);
                    reqFTP.UseBinary = true;
                    reqFTP.UsePassive = true;
                    reqFTP.KeepAlive = true;
                    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                    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();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    

      获取目录中文件列表

    /// <summary>
            /// 从ftp服务器上获得文件列表
            /// </summary>
            /// <param name="username">FTP用户名</param>
            /// <param name="password">FTP密码</param>
            /// <param name="path">FTP URL</param>
            /// <param name="RequedstPath">服务器下的相对路径</param>
            /// <returns></returns>
            public static List<String> GetFile(String username, String password, String path, String RequedstPath)
            {
                List<String> strs = new List<String>();
                try
                {
                    String uri = path + "//" + RequedstPath;  //目标路径 path为服务器地址
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    WebResponse response = reqFTP.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
    
                    String line = reader.ReadLine();
                    while (line != null)
                    {
                        if (!line.Contains("<DIR>"))
                        {
                            String msg = line.Substring(39).Trim();
                            strs.Add(msg);
                        }
                        line = reader.ReadLine();
                    }
                    reader.Close();
                    response.Close();
                    return strs;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取文件出错:" + ex.Message);
                }
                return strs;
            }
    

      获取文件夹下目录列表

    /// <summary>
            /// 从ftp服务器上获得文件夹列表
            /// </summary>
            /// <param name="username">FTP用户名</param>
            /// <param name="password">FTP密码</param>
            /// <param name="path">FTP URL</param>
            /// <param name="RequedstPath">服务器下的相对路径</param>
            /// <returns></returns>
            public static List<String> GetDirctory(String username, String password, String path, String RequedstPath)
            {
                List<String> strs = new List<String>();
                try
                {
                    String uri = path + "//" + RequedstPath;  //目标路径 path为服务器地址
                    FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                    // ftp用户名和密码
                    reqFTP.Credentials = new NetworkCredential(username, password);
                    reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    WebResponse response = reqFTP.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名
    
                    String line = reader.ReadLine();
                    while (line != null)
                    {
                        if (line.Contains("<DIR>"))
                        {
                            String msg = line.Substring(line.LastIndexOf("<DIR>") + 5).Trim();
                            strs.Add(msg);
                        }
                        line = reader.ReadLine();
                    }
                    reader.Close();
                    response.Close();
                    return strs;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("获取目录出错:" + ex.Message);
                }
                return strs;
            }
    

      

  • 相关阅读:
    OpenOffice 在 Linux 下安装使用
    LINUX环境使用rpm命令安装gcc
    用shell脚本执行mysql脚本
    CentOS 7下用firewall-cmd控制端口与端口转发详解(转载)
    Hive字段中文注释乱码解决办法
    真正从零开始,TensorFlow详细安装入门图文教程!
    九、Oracle SQL(优化专题&分表分区)
    八、Oracle SQL(聚合函数&标量函数)
    七、Oracle SQL(Oracle 定时任务基础)
    六、Oracle SQL(游标&RECORD&存过、游标、RECORD整合)
  • 原文地址:https://www.cnblogs.com/byron-123/p/13141710.html
Copyright © 2011-2022 走看看