码迷,mamicode.com
首页 > 其他好文 > 详细

FTP操作

时间:2015-01-11 14:51:39      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

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("\n");
                                         line = reader.ReadLine();
                                 }
                                 result.Remove(result.ToString().LastIndexOf("\n"), 1);
                                 reader.Close();
                                 response.Close();
                                 return result.ToString().Split(\n);
                         }
                         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("\n");                                        
                                                 }
                                         }
                                         else
                                         {
                                                 result.Append(line);
                                                 result.Append("\n");
                                         }
                                         line = reader.ReadLine();
                                 }
                                 result.Remove(result.ToString().LastIndexOf(\n), 1);
                                 reader.Close();
                                 response.Close();
                                 return result.ToString().Split(\n);
                         }
                         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() + "\n";
                                 }
                                 else if (str.Trim().Substring(0, 1).ToUpper() == "D")
                                 {
                                         /*判断 Unix 风格*/
                                         string dir = str.Substring(54).Trim();
                                         if (dir != "." && dir != "..")
                                         {
                                                 m += dir + "\n";
                                         }
                                 }
                         }

                         char[] n = new char[] { \n };
                         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)
                 {

                 }
         }
 }

 

FTP操作

标签:

原文地址:http://www.cnblogs.com/xieqianli/p/4216452.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!