C#中的FTP类

 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();
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值