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 ){
                 foreachvar 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( 01).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);
        }

转自:http://enjoyasp.net/?p=494

你可能感兴趣的:(ftp)