C#中的FTP类

来源:互联网 发布:李小龙拳脚力量数据 编辑:程序博客网 时间:2024/06/03 18:51
 public class FtpHelper    {        /// <summary>        ///         /// </summary>        /// <param name="fileName">上传的文件名</param>        /// <param name="ftpServerIP"></param>        /// <param name="path"></param>        /// <param name="userName"></param>        /// <param name="password"></param>        /// <param name="form">窗体</param>        /// <param name="pbarProcessUpload">进度条</param>        /// <returns></returns>        public static bool UploadFileByFtpWebRequest(string fileName, string ftpServerIP, string path, string userName, string password, System.Windows.Forms.Form form, System.Windows.Forms.ProgressBar pbarProcessUpload)        {            bool result = true;            string url = string.Format("ftp://{0}/{1}/{2}", ftpServerIP, path, fileName.Substring(fileName.LastIndexOf(@"\") + 1));            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);            request.Credentials = new NetworkCredential(userName, password);            request.Method = WebRequestMethods.Ftp.UploadFile;            Stream stream = request.GetRequestStream();            FileStream fileStream = new FileStream(fileName, FileMode.Open);            int packageSize = 1024 * 1024;            int packageCount = (int)(fileStream.Length / packageSize);            int rest = (int)(fileStream.Length % packageSize);            //控制进度条            form.BeginInvoke(new DoSomething(delegate()            {                pbarProcessUpload.Maximum = packageCount;                if (rest != 0) pbarProcessUpload.Maximum += 1;            }));            for (int index = 0; index < packageCount; index++)            {                byte[] buffer = new byte[packageSize];                fileStream.Read(buffer, 0, buffer.Length);                stream.Write(buffer, 0, buffer.Length);                form.BeginInvoke(new DoSomething(delegate()                {                    pbarProcessUpload.Value = index;                }));            }            if (rest != 0)            {                byte[] buffer = new byte[rest];                fileStream.Read(buffer, 0, buffer.Length);                stream.Write(buffer, 0, buffer.Length);                form.BeginInvoke(new DoSomething(delegate()                {                    pbarProcessUpload.Value += 1;                }));            }            stream.Close();            fileStream.Close();            return result;        }        /// <summary>        /// 下载方法        /// </summary>        /// <param name="fileName">下载的文件名</param>        /// <param name="ftpServerIP"></param>        /// <param name="path"></param>        /// <param name="userName"></param>        /// <param name="password"></param>        /// <param name="form">窗体</param>        /// <param name="pbarProcessDownload">进度条</param>        /// <param name="fileNameSaveAs">保存的文件名</param>        /// <returns></returns>        public static bool DownloadFileByFtpWebRequest(string fileName, string ftpServerIP, string path, string userName, string password, System.Windows.Forms.Form form, System.Windows.Forms.ProgressBar pbarProcessDownload, string fileNameSaveAs)        {            bool result = true;            string url = string.Format("ftp://{0}/{1}/{2}", ftpServerIP, path, fileName.Substring(fileName.LastIndexOf(@"\") + 1));            FtpWebRequest requsetOfLength = (FtpWebRequest)WebRequest.Create(url);            requsetOfLength.Credentials = new NetworkCredential(userName, password);            requsetOfLength.Method = WebRequestMethods.Ftp.GetFileSize;            long fileSize = requsetOfLength.GetResponse().ContentLength;            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);            request.Credentials = new NetworkCredential(userName, password);            request.UseBinary = true;            request.KeepAlive = false;            request.Method = WebRequestMethods.Ftp.DownloadFile;            FtpWebResponse response = (FtpWebResponse)request.GetResponse();            Stream stream = response.GetResponseStream();            FileStream fileStream = new FileStream(fileNameSaveAs, FileMode.Create);            int bufferSize = 2048;            int readCount;            int Maximum = (int)fileSize / bufferSize;            if (Maximum == 0) Maximum = 100;            byte[] buffer = new byte[bufferSize];            readCount = stream.Read(buffer, 0, bufferSize);            form.BeginInvoke(new DoSomething(delegate()            {                pbarProcessDownload.Maximum = Maximum;            }));            int index = 0;            while (readCount > 0)            {                fileStream.Write(buffer, 0, readCount);                readCount = stream.Read(buffer, 0, bufferSize);                form.BeginInvoke(new DoSomething(delegate()                {                    if (index <= pbarProcessDownload.Maximum)                        pbarProcessDownload.Value = index++;                }                ));            }            stream.Close();            fileStream.Close();            response.Close();            form.BeginInvoke(new DoSomething(delegate()            {                pbarProcessDownload.Value = 0;            }));            return result;        }        private delegate void DoSomething();    }


测试窗体


代码:

 public partial class FormFtpTest : Form
    {
        public FormFtpTest()
        {
            InitializeComponent();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openDlg = new OpenFileDialog();
            if (openDlg.ShowDialog() != DialogResult.OK) return;
            string fileName = openDlg.FileName;


            Thread thread = new Thread(new ThreadStart(delegate()
           {
               bool result = Common.FtpHelper.UploadFileByFtpWebRequest(fileName, "172.213.253.158", "\\", "wx", "123", this, pbarProcessUpload);
               if (result) MessageBox.Show("ok");
               else MessageBox.Show("error");
           }));
            thread.Start();
        }




        private void button2_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveDlg = new SaveFileDialog();
            saveDlg.FileName = textBox1.Text;


            if (saveDlg.ShowDialog() != DialogResult.OK) return;


            string fileName = saveDlg.FileName;


            Thread thread = new Thread(new ThreadStart(delegate()
             {
                 bool result = Common.FtpHelper.DownloadFileByFtpWebRequest(textBox1.Text, "172.123.213.51", "\\", "wx", "123", this, pbarProcessUpload, fileName);
                 if (result) MessageBox.Show("ok");
                 else MessageBox.Show("error");
             }));
            thread.Start();
        }
    }


0 0