您的位置:首页 > 编程语言 > C#

C#对FTP的操作(上传,下载,重命名文件,删除文件,文件存在检查)

2008-12-15 17:30 806 查看
using System;

using System.Collections.Generic;

using System.Text;

using System.Net;

using System.Data;

using System.IO;

using System.ComponentModel;

namespace Common

{

    public class FTPClient

    {

        private string ftpServerIP = String.Empty;

        private string ftpUser = String.Empty;

        private string ftpPassword = String.Empty;

        private string ftpRootURL = String.Empty;        

        public FTPClient(string url, string userid,string password)

        {

            this.ftpServerIP = ftp的IP地址;

            this.ftpUser = 用户名;

            this.ftpPassword = 密码;

            this.ftpRootURL = "ftp://" + url + "/";

        }

        /// <summary>

        /// 上传

        /// </summary>

        /// <param name="localFile">本地文件绝对路径</param>

        /// <param name="ftpPath">上传到ftp的路径</param>

        /// <param name="ftpFileName">上传到ftp的文件名</param>

        public bool fileUpload(FileInfo localFile, string ftpPath, string ftpFileName)

        {

            bool success = false;

            FtpWebRequest ftpWebRequest = null;

            FileStream localFileStream = null;

            Stream requestStream = null;

            try

            {

                string uri = ftpRootURL + ftpPath + ftpFileName;

                ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

                ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);

                ftpWebRequest.UseBinary = true;

                ftpWebRequest.KeepAlive = false;

                ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;

                ftpWebRequest.ContentLength = localFile.Length;

                int buffLength = 2048;

                byte[] buff = new byte[buffLength];

                int contentLen;

                localFileStream = localFile.OpenRead();

                requestStream = ftpWebRequest.GetRequestStream();

                contentLen = localFileStream.Read(buff, 0, buffLength);

                while (contentLen != 0)

                {

                    requestStream.Write(buff, 0, contentLen);

                    contentLen = localFileStream.Read(buff, 0, buffLength);

                }

                success = true;

            }

            catch (Exception)

            {

                success = false;

            }

            finally

            { 

                if (requestStream != null)

                {

                    requestStream.Close();

                }

                if (localFileStream != null)

                {

                    localFileStream.Close();

                }

            }

            return success;

        }

        /// <summary>

        /// 上传文件

        /// </summary>

        /// <param name="localPath">本地文件地址(没有文件名)</param>

        /// <param name="localFileName">本地文件名</param>

        /// <param name="ftpPath">上传到ftp的路径</param>

        /// <param name="ftpFileName">上传到ftp的文件名</param>

        public bool fileUpload(string localPath, string localFileName, string ftpPath, string ftpFileName)

        {

            bool success = false;

            try

            {

                FileInfo localFile = new FileInfo(localPath + localFileName);

                if (localFile.Exists)

                {

                    success = fileUpload(localFile, ftpPath, ftpFileName);

                }

                else

                {

                    success = false;

                }

            }

            catch (Exception)

            {

                success = false;

            }

            return success;

        }

        /// <summary>

        /// 下载文件

        /// </summary>

        /// <param name="localPath">本地文件地址(没有文件名)</param>

        /// <param name="localFileName">本地文件名</param>

        /// <param name="ftpPath">下载的ftp的路径</param>

        /// <param name="ftpFileName">下载的ftp的文件名</param>

        public bool fileDownload(string localPath, string localFileName, string ftpPath, string ftpFileName)

        {

            bool success = false;

            FtpWebRequest ftpWebRequest = null;

            FtpWebResponse ftpWebResponse = null;

            Stream ftpResponseStream = null;

            FileStream outputStream = null;

            try

            {

                outputStream = new FileStream(localPath + localFileName, FileMode.Create);

                string uri = ftpRootURL + ftpPath + ftpFileName;

                ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

                ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);

                ftpWebRequest.UseBinary = true;

                ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;

                ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();

                ftpResponseStream = ftpWebResponse.GetResponseStream();

                long contentLength = ftpWebResponse.ContentLength;

                int bufferSize = 2048;

                byte[] buffer = new byte[bufferSize];

                int readCount;

                readCount = ftpResponseStream.Read(buffer, 0, bufferSize);

                while (readCount > 0)

                {

                    outputStream.Write(buffer, 0, readCount);

                    readCount = ftpResponseStream.Read(buffer, 0, bufferSize);

                }

                success = true;

            }

            catch (Exception)

            {

                success = false;

            }

            finally

            {

                if (outputStream != null)

                {

                    outputStream.Close();

                }

                if (ftpResponseStream != null)

                {

                    ftpResponseStream.Close();

                }

                if (ftpWebResponse != null)

                {

                    ftpWebResponse.Close();

                }

            }

            return success;

        }

        /// <summary>

        /// 重命名

        /// </summary>

        /// <param name="ftpPath">ftp文件路径</param>

        /// <param name="currentFilename"></param>

        /// <param name="newFilename"></param>

        public bool fileRename(string ftpPath, string currentFileName, string newFileName)

        {

            bool success = false;

            FtpWebRequest ftpWebRequest = null;

            FtpWebResponse ftpWebResponse = null;

            Stream ftpResponseStream = null;

            try

            {

                string uri = ftpRootURL + ftpPath + currentFileName;

                ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

                ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);

                ftpWebRequest.UseBinary = true;

                ftpWebRequest.Method = WebRequestMethods.Ftp.Rename;

                ftpWebRequest.RenameTo = newFileName;

                

                ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();

                ftpResponseStream = ftpWebResponse.GetResponseStream();

               

            }

            catch (Exception)

            {

                success = false;

            }

            finally

            {

                if (ftpResponseStream != null)

                {

                    ftpResponseStream.Close();

                }

                if (ftpWebResponse != null)

                {

                    ftpWebResponse.Close();

                }

            }

            return success;

        }

        /// <summary>

        /// 消除文件

        /// </summary>

        /// <param name="filePath"></param>

        public bool fileDelete(string ftpPath, string ftpName)

        {

            bool success = false;

            FtpWebRequest ftpWebRequest = null;

            FtpWebResponse ftpWebResponse = null;

            Stream ftpResponseStream = null;

            StreamReader streamReader = null;

            try

            {

                string uri = ftpRootURL + ftpPath + ftpName;

                ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

                ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);

                ftpWebRequest.KeepAlive = false;

                ftpWebRequest.Method = WebRequestMethods.Ftp.DeleteFile;

                ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();

                long size = ftpWebResponse.ContentLength;

                ftpResponseStream = ftpWebResponse.GetResponseStream();

                streamReader = new StreamReader(ftpResponseStream);

                string result = String.Empty;

                result = streamReader.ReadToEnd();

               

                success = true;

            }

            catch (Exception)

            {

                success = false;

            }

            finally

            {

                if (streamReader != null)

                {

                    streamReader.Close();

                }

                if (ftpResponseStream != null)

                {

                    ftpResponseStream.Close();

                }

                if (ftpWebResponse != null)

                {

                    ftpWebResponse.Close();

                }

            }

            return success;

        }

        /// <summary>

        /// 文件存在检查

        /// </summary>

        /// <param name="ftpPath"></param>

        /// <param name="ftpName"></param>

        /// <returns></returns>

        public bool fileCheckExist(string ftpPath, string ftpName)

        {

            bool success = false;

            FtpWebRequest ftpWebRequest = null;

            WebResponse webResponse = null;            

            StreamReader reader = null;

            try

            {

                string url = ftpRootURL + ftpPath;                

                

                ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));

                ftpWebRequest.Credentials = new NetworkCredential(ftpUser, ftpPassword);

                ftpWebRequest.Method = WebRequestMethods.Ftp.ListDirectory;

                ftpWebRequest.KeepAlive = false;

                webResponse = ftpWebRequest.GetResponse();

                reader = new StreamReader(webResponse.GetResponseStream());

                string line = reader.ReadLine();

                while (line != null)

                {

                    if (line == ftpName)

                    {

                        success = true;

                        break;

                    }

                    line = reader.ReadLine();

                }

            }

            catch (Exception)

            {

                success = false;

            }

            finally

            {

                if (reader != null)

                {

                    reader.Close();

                }

                if (webResponse != null)

                {

                    webResponse.Close();

                }

            }

            return success;

        }

    }

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# exception null buffer byte url
相关文章推荐