C#FTP下载

using System.Net;

下载结果枚举:

    /// <summary>
    /// <para>下载结果</para>
    /// Succeeded成功,
    /// Failed失败,
    /// Exsited文件已存在,
    /// </summary>
    public enum DownLoadResult
    {
           Succeeded,
           Failed,
           Exsited,
    }

无口令下载:

     /// <summary>
        /// 无口令,从FTP服务器下载文件
        /// </summary>
        /// <param name="ftpPath">ftp路径(包含文件名),例如"ftp://192.168.169.177/FileName.txt"</param>
        /// <param name="savePath">保存路径(包含文件名),例如"D:\\FileName.txt"</param> 
        /// <returns>下载成功反回Succeeded,失败返回Failed,文件已存在返回Exsited</returns>
        public static DownLoadResult FTPDownLoad(string ftpPath, string savePath)
        {
            DownLoadResult result;
            //文件已存在
            if (File.Exists(savePath)) return DownLoadResult.Exsited;
            //声明变量
            FtpWebRequest reqFTP = null;//Ftp请求
            FileStream saveStream = null;//Ftp文件流
            Stream ftpStream = null;//Ftp传输流
            FtpWebResponse response = null;//Ftp响应

            try
            {
                //创建要保存的文件
                saveStream = new FileStream(savePath, FileMode.Create);
                //下载文件设置
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath));
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                //开始请求
                response = (FtpWebResponse)reqFTP.GetResponse();
                //开始下载
                ftpStream = response.GetResponseStream();
                //将下载内容存入文件流
                int bufferSize = 65535;
                int readCount;
                byte[] buffer = new byte[bufferSize];
                readCount = ftpStream.Read(buffer, 0, bufferSize); 
                while (readCount > 0)
                {
                    saveStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }
                //下载成功
                result = DownLoadResult.Succeeded;
            }
            catch
            {
                //下载错误返回Failed
                result = DownLoadResult.Failed;
            }
            finally
            {
                //释放资源
                if (ftpStream != null) ftpStream.Close();
                if (saveStream != null) saveStream.Close();
                if (response != null) response.Close();
            }
            return result;
        }

有口令下载:

        /// <summary>
        /// 从FTP服务器下载文件(有凭据)
        /// </summary>
        /// <param name="ftpPath">ftp路径(包含文件名),例如"ftp://192.168.169.177/FileName.txt"</param>
        /// <param name="savePath">保存路径(包含文件名),例如"D:\\FileName.txt"</param> 
        /// <returns>下载成功反回Succeeded,失败返回Failed,文件已存在返回Exsited</returns>
        public static DownLoadResult FTPDownLoad(string ftpPath, string savePath, string ftpUserID, string ftpPassword)
        {
            DownLoadResult result;
            //文件已存在
            if (File.Exists(savePath)) return DownLoadResult.Exsited;
            //声明变量
            FtpWebRequest reqFTP = null;//Ftp请求
            FileStream saveStream = null;//Ftp文件流
            Stream ftpStream = null;//Ftp传输流
            FtpWebResponse response = null;//Ftp响应

            try
            {
                //创建要保存的文件
                saveStream = new FileStream(savePath, FileMode.Create);
                //下载文件设置
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath));
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                //添加通讯凭据
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                //开始请求
                response = (FtpWebResponse)reqFTP.GetResponse();
                //开始下载
                ftpStream = response.GetResponseStream();
                //将下载内容存入文件流
                int bufferSize = 65535;
                int readCount;
                byte[] buffer = new byte[bufferSize];
                readCount = ftpStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    saveStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }
                //下载成功
                result = DownLoadResult.Succeeded;
            }
            catch
            {
                //下载错误返回Failed
                result = DownLoadResult.Failed;
            }
            finally
            {
                //释放资源
                if (ftpStream != null) ftpStream.Close();
                if (saveStream != null) saveStream.Close();
                if (response != null) response.Close();
            }
            return result;
        }
posted @ 2012-06-12 11:00  Jim_技迷  阅读(348)  评论(0编辑  收藏  举报