好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#操作ftp类完整实例

本文实例讲述了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#程序设计有所帮助。

dy("nrwz");

查看更多关于C#操作ftp类完整实例的详细内容...

  阅读:67次