首页 > 编程 > C# > 正文

C#操作ftp类完整实例

2020-01-24 01:29:14
字体:
来源:转载
供稿:网友

本文实例讲述了C#操作ftp类。分享给大家供大家参考。具体如下:

using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Net;using System.Globalization;namespace FtpTest1{ 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 + "/" ; } static void Main() {  //string file = "c://aq3.gifa";  //FileInfo fileInf = new FileInfo(file);  //if (!fileInf.Exists)  //{  // Console.WriteLine(file + " no exists");  //}  //else {  // Console.WriteLine("yes");  //}  //Console.ReadLine();  FtpWeb fw = new FtpWeb("121.11.65.10", "", "aa1", "aa");  string[] filePaths = { "c://aq3.gif1", "c://aq2.gif1", "c://bsmain_runtime.log" };  Console.WriteLine(fw.UploadFile(filePaths));  Console.ReadLine(); } //上传文件 public string UploadFile( string[] filePaths ) {  StringBuilder sb = new StringBuilder();  if ( filePaths != null && filePaths.Length > 0 ){  foreach( var file in filePaths ){   sb.Append(Upload( file ));  }  }  return sb.ToString(); }  /// <summary> /// 上传文件 /// </summary> /// <param name="filename"></param> private string Upload(string filename) {  FileInfo fileInf = new FileInfo(filename);  if ( !fileInf.Exists ){  return filename + " 不存在!/n";  }  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.UsePassive = false; //选择主动还是被动模式  //Entering Passive Mode  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)  {  return "同步 "+filename+"时连接不上服务器!/n";  //Insert_Standard_ErrorLog.Insert("FtpWeb", "Upload Error --> " + ex.Message);  }  return ""; } /// <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> /// <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());  string line = reader.ReadLine();  line = reader.ReadLine();  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)  {  downloadFiles = null;  Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFilesDetailList Error --> " + ex.Message);  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());  string line = reader.ReadLine();  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)  {  if (str.Trim().Substring(0, 1).ToUpper() == "D")  {   m += str.Substring(54).Trim() + "/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); }

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表