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

  • 相关阅读:
    Python—requests模块详解
    强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)
    dexlib2的源码框架
    Android检测代理
    APP加固反调试(Anti-debugging)技术点汇总
    IDA逆向常用宏定义
    JNI学习积累之一 ---- 常用函数大全
    CMake之CMakeLists.txt编写入门
    Android Project和app中两个build.gradle配置的区别
    更新说明
  • 原文地址:https://www.cnblogs.com/lds85930/p/1173817.html
Copyright © 2011-2022 走看看