zoukankan      html  css  js  c++  java
  • 多线程实现文件复制

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

  • 相关阅读:
    EBS Form菜单栏增加选项
    Oracle EBS 基础概念:弹性域-上下文字段
    EBS apps, applsys 的关系及密码更改
    设计模式-建造者模式
    微服务入门
    常见SQL编写和优化
    java 8 stream toMap问题
    mysql8.0.22在centos7.6下的简单安装
    mysql8的collate问题和修改
    springboot+security自定义登录-1-基础-自定义用户和登录界面
  • 原文地址:https://www.cnblogs.com/lds85930/p/1173817.html
Copyright © 2011-2022 走看看