zoukankan      html  css  js  c++  java
  • FTP操作

    using System;
     using System.Collections.Generic;
     using System.Text;
     using System.IO;
     using System.Net;
     using System.Windows.Forms;
     using System.Globalization;
    
     namespace ppi2bmp
     {
             public class FtpWeb
             {
                     string ftpServerIP;
                     string ftpRemotePath;
                     string ftpUserID;
                     string ftpPassword;
                     string ftpURI;
    
                     /// <summary>
                     /// 连接FTP
                     /// </summary>
                     /// <param name="FtpServerIP">FTP连接地址</param>
                     /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
                     /// <param name="FtpUserID">用户名</param>
                     /// <param name="FtpPassword">密码</param>
                     public FtpWeb(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
                     {
                             ftpServerIP = FtpServerIP;
                             ftpRemotePath = FtpRemotePath;
                             ftpUserID = FtpUserID;
                             ftpPassword = FtpPassword;
                             ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
                     }
    
                     /// <summary>
                     /// 上传
                    /// </summary>
                     /// <param name="filename"></param>
                     public void upload(string filename)
                     {
                             FileInfo fileInf = new FileInfo(filename);
                             string uri = ftpURI + fileInf.Name;
                             FtpWebRequest reqFTP;
    
                             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
                             reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                             reqFTP.KeepAlive = false;
                             reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                             reqFTP.UseBinary = true;
                             reqFTP.ContentLength = fileInf.Length;
                             int buffLength = 2048;
                             byte[] buff = new byte[buffLength];
                             int contentLen;
                             FileStream fs = fileInf.OpenRead();
                             try
                             {
                                     Stream strm = reqFTP.GetRequestStream();
                                     contentLen = fs.Read(buff, 0, buffLength);
                                     while (contentLen != 0)
                                     {
                                             strm.Write(buff, 0, contentLen);
                                             contentLen = fs.Read(buff, 0, buffLength);
                                     }
                                     strm.Close();
                                     fs.Close();
                             }
                             catch (Exception ex)
                             {
                                     Insert_Standard_ErrorLog.Insert("FtpWeb", "Upload Error --> " + ex.Message);
                             }
                     }
    
                     /// <summary>
                     /// 下载
                    /// </summary>
                     /// <param name="filePath"></param>
                     /// <param name="fileName"></param>
                     public void download(string filePath, string fileName)
                     {
                             FtpWebRequest reqFTP;
                             try
                             {
                                     FileStream outputStream = new FileStream(filePath + "\" + fileName, FileMode.Create);
    
                                     reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
                                     reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                                     reqFTP.UseBinary = true;
                                     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();
                             }
                             catch (Exception ex)
                             {
                                     Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
                             }
                     }
    
    
                     /// <summary>
                     /// 删除文件
                    /// </summary>
                     /// <param name="fileName"></param>
                     public void delete(string fileName)
                     {
                             try
                             {
                                     string uri = ftpURI + fileName;
                                     FtpWebRequest reqFTP;
                                     reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    
                                     reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                                     reqFTP.KeepAlive = false;
                                     reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
    
                                     string result = String.Empty;
                                     FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                                     long size = response.ContentLength;
                                     Stream datastream = response.GetResponseStream();
                                     StreamReader sr = new StreamReader(datastream);
                                     result = sr.ReadToEnd();
                                     sr.Close();
                                     datastream.Close();
                                     response.Close();
                             }
                             catch (Exception ex)
                             {
                                     Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + "  文件名:" + fileName);
                             }
                     }
    
                     /// <summary>
                     /// 删除文件夹
                    /// </summary>
                     /// <param name="folderName"></param>
                     public void removeDirectory(string folderName)
                     {
                             try
                             {
                                     string uri = ftpURI + folderName;
                                     FtpWebRequest reqFTP;
                                     reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    
                                     reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                                     reqFTP.KeepAlive = false;
                                     reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
    
                                     string result = String.Empty;
                                     FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                                     long size = response.ContentLength;
                                     Stream datastream = response.GetResponseStream();
                                     StreamReader sr = new StreamReader(datastream);
                                     result = sr.ReadToEnd();
                                     sr.Close();
                                     datastream.Close();
                                     response.Close();
                             }
                             catch (Exception ex)
                             {
                                     Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + "  文件名:" + folderName);
                             }
                     }
    
                     /// <summary>
                     /// 获取当前目录下明细(包含文件和文件夹)
                     /// </summary>
                     /// <returns></returns>
                     public string[] getFilesDetailList()
                     {
                             string[] downloadFiles;
                             try
                             {
                                     StringBuilder result = new StringBuilder();
                                     FtpWebRequest ftp;
                                     ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
                                     ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                                     ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                                     WebResponse response = ftp.GetResponse();
                                     StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
    
                                     string line = reader.ReadLine();
    
                                     while (line != null)
                                     {
                                             result.Append(line);
                                             result.Append("
    ");
                                             line = reader.ReadLine();
                                     }
                                     result.Remove(result.ToString().LastIndexOf("
    "), 1);
                                     reader.Close();
                                     response.Close();
                                     return result.ToString().Split('
    ');
                             }
                             catch (Exception ex)
                             {                        
                                     Console.WriteLine(ex.Message);
                                     downloadFiles = null;
                                     return downloadFiles;
                             }
                     }
    
                     /// <summary>
                     /// 获取当前目录下文件列表(仅文件)
                     /// </summary>
                     /// <returns></returns>
                     public string[] getFileList(string mask)
                     {
                             string[] downloadFiles;
                             StringBuilder result = new StringBuilder();
                             FtpWebRequest reqFTP;
                             try
                             {
                                     reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
                                     reqFTP.UseBinary = true;
                                     reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                                     reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
                                     WebResponse response = reqFTP.GetResponse();
                                     StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
    
                                     string line = reader.ReadLine();
                                     //while (line != null && line!="." && line!="..")
                                     while (line != null)
                                     {
                                             if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
                                             {
    
                                                     string mask_ = mask.Substring(0, mask.IndexOf("*"));
                                                     if (line.Substring(0, mask_.Length) == mask_)
                                                     {
                                                             result.Append(line);
                                                             result.Append("
    ");                                        
                                                     }
                                             }
                                             else
                                             {
                                                     result.Append(line);
                                                     result.Append("
    ");
                                             }
                                             line = reader.ReadLine();
                                     }
                                     result.Remove(result.ToString().LastIndexOf('
    '), 1);
                                     reader.Close();
                                     response.Close();
                                     return result.ToString().Split('
    ');
                             }
                             catch (Exception ex)
                             {
                                     downloadFiles = null;
                                     if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
                                     {
                                             Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileList Error --> " + ex.Message.ToString());
                                     }
                                     return downloadFiles;
                             }
                     }
    
                     /// <summary>
                     /// 获取当前目录下所有的文件夹列表(仅文件夹)
                     /// </summary>
                     /// <returns></returns>
                     public string[] getDirectoryList()
                     {
                             string[] drectory = getFilesDetailList();
                             string m = string.Empty;
                             foreach (string str in drectory)
                             {
                                     int dirPos = str.IndexOf("<DIR>");
                                     if (dirPos > 0)
                                     {
                                             /*判断 Windows 风格*/
                                             m += str.Substring(dirPos + 5).Trim() + "
    ";
                                     }
                                     else if (str.Trim().Substring(0, 1).ToUpper() == "D")
                                     {
                                             /*判断 Unix 风格*/
                                             string dir = str.Substring(54).Trim();
                                             if (dir != "." && dir != "..")
                                             {
                                                     m += dir + "
    ";
                                             }
                                     }
                             }
    
                             char[] n = new char[] { '
    ' };
                             return m.Split(n);
                     }
    
                     /// <summary>
                     /// 判断当前目录下指定的子目录是否存在
                    /// </summary>
                     /// <param name="RemoteDirectoryName">指定的目录名</param>
                     public bool DirectoryExist(string RemoteDirectoryName)
                     {
                             string[] dirList = getDirectoryList();
                             foreach (string str in dirList)
                             {
                                     if (str.Trim() == RemoteDirectoryName.Trim())
                                     {
                                             return true;
                                     }
                             }
                             return false;
                     }
    
                     /// <summary>
                     /// 判断当前目录下指定的文件是否存在
                    /// </summary>
                     /// <param name="RemoteFileName">远程文件名</param>
                     public bool FileExist(string RemoteFileName)
                     {
                             string[] fileList = getFileList("*.*");
                             foreach (string str in fileList)
                             {
                                     if (str.Trim() == RemoteFileName.Trim())
                                     {
                                             return true;
                                     }
                             }
                             return false;
                     }
    
                     /// <summary>
                     /// 创建文件夹
                    /// </summary>
                     /// <param name="dirName"></param>
                     public void MakeDir(string dirName)
                     {
                             FtpWebRequest reqFTP;
                             try
                             {
                                     // dirName = name of the directory to create.
                                     reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
                                     reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
                                     reqFTP.UseBinary = true;
                                     reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                                     FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                                     Stream ftpStream = response.GetResponseStream();
    
                                     ftpStream.Close();
                                     response.Close();
                             }
                             catch (Exception ex)
                             {
                                     Insert_Standard_ErrorLog.Insert("FtpWeb", "MakeDir Error --> " + ex.Message);
                             }
                     }
    
                     /// <summary>
                     /// 获取指定文件大小
                    /// </summary>
                     /// <param name="filename"></param>
                     /// <returns></returns>
                     public long GetFileSize(string filename)
                     {
                             FtpWebRequest reqFTP;
                             long fileSize = 0;
                             try
                             {
                                     reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
                                     reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
                                     reqFTP.UseBinary = true;
                                     reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                                     FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                                     Stream ftpStream = response.GetResponseStream();
                                     fileSize = response.ContentLength;
    
                                     ftpStream.Close();
                                     response.Close();
                             }
                             catch (Exception ex)
                             {
                                     Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileSize Error --> " + ex.Message);
                             }
                             return fileSize;
                     }
    
                     /// <summary>
                     /// 改名
                    /// </summary>
                     /// <param name="currentFilename"></param>
                     /// <param name="newFilename"></param>
                     public void ReName(string currentFilename, string newFilename)
                     {
                             FtpWebRequest reqFTP;
                             try
                             {
                                     reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
                                     reqFTP.Method = WebRequestMethods.Ftp.Rename;
                                     reqFTP.RenameTo = newFilename;
                                     reqFTP.UseBinary = true;
                                     reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                                     FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                                     Stream ftpStream = response.GetResponseStream();
    
                                     ftpStream.Close();
                                     response.Close();
                             }
                             catch (Exception ex)
                             {
                                     Insert_Standard_ErrorLog.Insert("FtpWeb", "ReName Error --> " + ex.Message);
                             }
                     }
    
                     /// <summary>
                     /// 移动文件
                    /// </summary>
                     /// <param name="currentFilename"></param>
                     /// <param name="newFilename"></param>
                     public void MovieFile(string currentFilename, string newDirectory)
                     {
                             ReName(currentFilename, newDirectory);
                     }
    
                     /// <summary>
                     /// 切换当前目录
                    /// </summary>
                     /// <param name="DirectoryName"></param>
                     /// <param name="IsRoot">true 绝对路径   false 相对路径</param>
                     public void GotoDirectory(string DirectoryName, bool IsRoot)
                     {
                             if (IsRoot)
                             {
                                     ftpRemotePath = DirectoryName;
                             }
                             else
                             {
                                     ftpRemotePath += DirectoryName + "/";
                             }
                             ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
                     }
    
                     /// <summary>
                     /// 删除订单目录
                    /// </summary>
                     /// <param name="ftpServerIP">FTP 主机地址</param>
                     /// <param name="folderToDelete">FTP 用户名</param>
                     /// <param name="ftpUserID">FTP 用户名</param>
                     /// <param name="ftpPassword">FTP 密码</param>
                     public static void DeleteOrderDirectory(string ftpServerIP, string folderToDelete, string ftpUserID, string ftpPassword)
                     {
                             try
                             {
                                     if (!string.IsNullOrEmpty(ftpServerIP) && !string.IsNullOrEmpty(folderToDelete) && !string.IsNullOrEmpty(ftpUserID) && !string.IsNullOrEmpty(ftpPassword))
                                     {
                                             FtpWeb fw = new FtpWeb(ftpServerIP, folderToDelete, ftpUserID, ftpPassword);
                                             //进入订单目录
                                            fw.GotoDirectory(folderToDelete, true);
                                             //获取规格目录
                                            string[] folders = fw.getDirectoryList();
                                             foreach (string folder in folders)
                                             {
                                                     if (!string.IsNullOrEmpty(folder) || folder != "")
                                                     {
                                                             //进入订单目录
                                                            string subFolder = folderToDelete + "/" + folder;
                                                             fw.GotoDirectory(subFolder, true);
                                                             //获取文件列表
                                                            string[] files = fw.getFileList("*.*");
                                                             if (files != null)
                                                             {
                                                                     //删除文件
                                                                    foreach (string file in files)
                                                                     {
                                                                             fw.delete(file);
                                                                     }
                                                             }
                                                             //删除冲印规格文件夹
                                                            fw.GotoDirectory(folderToDelete, true);
                                                             fw.removeDirectory(folder);
                                                     }
                                             }
    
                                             //删除订单文件夹
                                            string parentFolder = folderToDelete.Remove(folderToDelete.LastIndexOf('/'));
                                             string orderFolder = folderToDelete.Substring(folderToDelete.LastIndexOf('/') + 1);
                                             fw.GotoDirectory(parentFolder, true);
                                             fw.removeDirectory(orderFolder);
                                     }
                                     else
                                     {
                                             throw new Exception("FTP 及路径不能为空!");
                                     }
                             }
                             catch (Exception ex)
                             {
                                     throw new Exception("删除订单时发生错误,错误信息为:" + ex.Message);
                             }
                     }
             }
    
    
             public class Insert_Standard_ErrorLog
             {
                     public static void Insert(string x, string y)
                     {
    
                     }
             }
     }
  • 相关阅读:
    <记录> axios 模拟表单提交数据
    PHP 设计模式(一)
    CSS3中translate、transform和translation的区别和联系
    微信小程序 支付功能 服务器端(TP5.1)实现
    微信小程序 用户登录 服务器端(TP5.1)实现
    <记录> curl 封装函数
    <记录>TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)
    PHP/TP5 接口设计中异常处理
    TP5 自定义验证器
    高并发和大流量解决方案--数据库缓存
  • 原文地址:https://www.cnblogs.com/xieqianli/p/4216452.html
Copyright © 2011-2022 走看看