FTPHelper-封装FTP的相关操作

来源:互联网 发布:云数据交换 编辑:程序博客网 时间:2024/05/22 12:12
using System;using System.IO;using System.Net;using System.Text;namespace Whir.Software.DataSyncTools.Library.Helper{    /// <summary>    ///     Ftp辅助类    /// </summary>    public class FtpHelper    {        private const int BufferSize = 2048;        private readonly string _host;        private readonly string _pass;        private readonly string _user;        private FtpWebRequest _ftpRequest;        private FtpWebResponse _ftpResponse;        private Stream _ftpStream;        public FtpHelper(string hostIp, string userName, string password)        {            _host = hostIp;            _user = userName;            _pass = password;        }        /// <summary>        ///     下载文件        /// </summary>        /// <param name="localFile"></param>        /// <param name="remoteFile"></param>        /// <returns></returns>        public FtpResult Download(string localFile, string remoteFile)        {            FtpResult result;            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + remoteFile);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;                _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();                _ftpStream = _ftpResponse.GetResponseStream();                var localFileStream = new FileStream(localFile, FileMode.Create);                var byteBuffer = new byte[BufferSize];                if (_ftpStream != null)                {                    int bytesRead = _ftpStream.Read(byteBuffer, 0, BufferSize);                    try                    {                        while (bytesRead > 0)                        {                            localFileStream.Write(byteBuffer, 0, bytesRead);                            bytesRead = _ftpStream.Read(byteBuffer, 0, BufferSize);                        }                    }                    catch (Exception ex)                    {                        result = new FtpResult(false, ex.Message);                        return result;                    }                }                localFileStream.Close();                if (_ftpStream != null) _ftpStream.Close();                _ftpResponse.Close();                _ftpRequest = null;                result = new FtpResult(true, "ok");            }            catch (Exception ex)            {                result = new FtpResult(false, ex.Message);            }            return result;        }        /// <summary>        ///     上传文件        /// </summary>        /// <param name="localFile"></param>        /// <param name="remoteFile"></param>        /// <returns></returns>        public FtpResult Upload(string localFile, string remoteFile)        {            FtpResult result;            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + remoteFile);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;                _ftpStream = _ftpRequest.GetRequestStream();                var localFileStream = new FileStream(localFile, FileMode.Create);                var byteBuffer = new byte[BufferSize];                int bytesSent = localFileStream.Read(byteBuffer, 0, BufferSize);                try                {                    while (bytesSent != 0)                    {                        _ftpStream.Write(byteBuffer, 0, bytesSent);                        bytesSent = localFileStream.Read(byteBuffer, 0, BufferSize);                    }                }                catch (Exception ex)                {                    result = new FtpResult(false, ex.Message);                    return result;                }                localFileStream.Close();                _ftpStream.Close();                _ftpRequest = null;                result = new FtpResult(true, "ok");            }            catch (Exception ex)            {                result = new FtpResult(false, ex.Message);            }            return result;        }        /// <summary>        ///     删除文件        /// </summary>        /// <param name="deleteFile"></param>        public FtpResult Delete(string deleteFile)        {            FtpResult result;            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + deleteFile);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;                _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();                _ftpResponse.Close();                _ftpRequest = null;                result = new FtpResult(true, "ok");            }            catch (Exception ex)            {                result = new FtpResult(false, ex.Message);            }            return result;        }        /// <summary>        ///     文件重命名        /// </summary>        /// <param name="currentFileNameAndPath"></param>        /// <param name="newFileName"></param>        /// <returns></returns>        public FtpResult Rename(string currentFileNameAndPath, string newFileName)        {            FtpResult result;            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + currentFileNameAndPath);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.Rename;                _ftpRequest.RenameTo = newFileName;                _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();                _ftpResponse.Close();                _ftpRequest = null;                result = new FtpResult(true, "ok");            }            catch (Exception ex)            {                result = new FtpResult(false, ex.Message);            }            return result;        }        /// <summary>        ///     创建目录        /// </summary>        /// <param name="newDirectory"></param>        /// <returns></returns>        public FtpResult CreateDirectory(string newDirectory)        {            FtpResult result;            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + newDirectory);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;                _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();                _ftpResponse.Close();                _ftpRequest = null;                result = new FtpResult(true, "ok");            }            catch (Exception ex)            {                result = new FtpResult(false, ex.Message);            }            return result;        }        /// <summary>        ///     取得文件创建时间        /// </summary>        /// <param name="fileName"></param>        /// <returns></returns>        public FtpResult GetFileCreatedDateTime(string fileName)        {            FtpResult result;            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + fileName);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.GetDateTimestamp;                _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();                _ftpStream = _ftpResponse.GetResponseStream();                if (_ftpStream != null)                {                    var ftpReader = new StreamReader(_ftpStream);                    string fileInfo;                    try                    {                        fileInfo = ftpReader.ReadToEnd();                    }                    catch (Exception ex)                    {                        result = new FtpResult(false, ex.Message);                        ftpReader.Close();                        if (_ftpStream != null) _ftpStream.Close();                        _ftpResponse.Close();                        _ftpRequest = null;                        return result;                    }                    ftpReader.Close();                    if (_ftpStream != null) _ftpStream.Close();                    _ftpResponse.Close();                    _ftpRequest = null;                    return new FtpResult(true, fileInfo);                }                return new FtpResult(false, "响应流为空");            }            catch (Exception ex)            {                result = new FtpResult(false, ex.Message);            }            return result;        }        /// <summary>        ///     取得文件大小        /// </summary>        /// <param name="fileName"></param>        /// <returns></returns>        public FtpResult GetFileSize(string fileName)        {            FtpResult result;            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + fileName);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;                _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();                _ftpStream = _ftpResponse.GetResponseStream();                if (_ftpStream != null)                {                    var ftpReader = new StreamReader(_ftpStream);                    string fileInfo = null;                    try                    {                        while (ftpReader.Peek() != -1)                        {                            fileInfo = ftpReader.ReadToEnd();                        }                    }                    catch (Exception ex)                    {                        result = new FtpResult(false, ex.Message);                        ftpReader.Close();                        if (_ftpStream != null) _ftpStream.Close();                        _ftpResponse.Close();                        _ftpRequest = null;                        return result;                    }                    ftpReader.Close();                    _ftpStream.Close();                    _ftpResponse.Close();                    _ftpRequest = null;                    return new FtpResult(true, fileInfo);                }                result = new FtpResult(false, "响应流为空");            }            catch (Exception ex)            {                result = new FtpResult(false, ex.Message);            }            return result;        }        /// <summary>        ///     显示远程目录结构         /// </summary>        /// <param name="directory"></param>        /// <returns></returns>        public string[] DirectoryListSimple(string directory)        {            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + directory);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;                _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();                _ftpStream = _ftpResponse.GetResponseStream();                if (_ftpStream != null)                {                    var ftpReader = new StreamReader(_ftpStream);                    string directoryRaw = null;                    try                    {                        while (ftpReader.Peek() != -1)                        {                            directoryRaw += ftpReader.ReadLine() + "|";                        }                    }                    catch (Exception ex)                    {                        Console.WriteLine(ex.ToString());                    }                    ftpReader.Close();                    _ftpStream.Close();                    _ftpResponse.Close();                    _ftpRequest = null;                    /* Return the Directory Listing as a string Array by Parsing 'directoryRaw' with the Delimiter you Append (I use | in This Example) */                    try                    {                        if (directoryRaw != null)                        {                            string[] directoryList = directoryRaw.Split("|".ToCharArray());                            return directoryList;                        }                    }                    catch (Exception ex)                    {                        Console.WriteLine(ex.ToString());                    }                }            }            catch (Exception ex)            {                Console.WriteLine(ex.ToString());            }            return new[] { "" };        }        /// <summary>        ///     远程文件列表        /// </summary>        /// <param name="directory"></param>        /// <returns></returns>        public string[] DirectoryListDetailed(string directory)        {            try            {                _ftpRequest = (FtpWebRequest)WebRequest.Create(_host + "/" + directory);                _ftpRequest.Credentials = new NetworkCredential(_user, _pass);                _ftpRequest.UseBinary = true;                _ftpRequest.UsePassive = true;                _ftpRequest.KeepAlive = true;                _ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;                _ftpResponse = (FtpWebResponse)_ftpRequest.GetResponse();                _ftpStream = _ftpResponse.GetResponseStream();                if (_ftpStream != null)                {                    var ftpReader = new StreamReader(_ftpStream);                    string directoryRaw = null;                    try                    {                        while (ftpReader.Peek() != -1)                        {                            directoryRaw += ftpReader.ReadLine() + "|";                        }                    }                    catch (Exception ex)                    {                        Console.WriteLine(ex.ToString());                    }                    ftpReader.Close();                    _ftpStream.Close();                    _ftpResponse.Close();                    _ftpRequest = null;                    try                    {                        if (directoryRaw != null)                        {                            string[] directoryList = directoryRaw.Split("|".ToCharArray());                            return directoryList;                        }                    }                    catch (Exception ex)                    {                        Console.WriteLine(ex.ToString());                    }                }            }            catch (Exception ex)            {                Console.WriteLine(ex.ToString());            }            /* Return an Empty string Array if an Exception Occurs */            return new[] { "" };        }    }    public class FtpResult    {        public FtpResult(bool isCusecess, string message)        {            IsSucess = isCusecess;            Message = message;        }        public bool IsSucess { get; set; }        public string Message { get; set; }    }}


原创粉丝点击