多线程实现文件复制

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;

namespace CopyFileDemo
{
    public partial class CopyProgressForm : Form
    {
        string destFile, srcFile;

        public CopyProgressForm(string destFile, string srcFile)
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;

            this.destFile = destFile;   // 要复制的源文件名称
            this.srcFile = srcFile;     // 要复制到的目标文件名称
        }

        private void CopyProgressForm_Load(object sender, EventArgs e)
        {
            this.Show();

            // 在此处创建多线程复制文件
            Thread thread = new Thread(new ThreadStart(this.CopyProcess));
            thread.IsBackground = true;
            thread.Start();
        }

        void CopyProcess()
        {
            FileStream src = null,dest = null;

            try
            {
                src = new FileStream(this.srcFile, FileMode.Open, FileAccess.Read, FileShare.Read);
                dest = new FileStream(this.destFile, FileMode.Create, FileAccess.Write, FileShare.None);

                long size = src.Length;
                long currBytes = 0;
                byte[] buffer = new byte[1024];
                int length = 0;

                do
                {
                    length = src.Read(buffer, 0, buffer.Length);
                    currBytes += length;
                    this.pgrProgress.Value = (int)(currBytes * 100 / size);

                    dest.Write(buffer, 0, length);
                }
                while (length != 0);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                if (src != null)
                    src.Close();
                if (dest != null)
                    dest.Close();

                this.Close();
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值