1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.IO; 10 using System.Threading; 11 namespace ThreadCopy 12 { 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 CheckForIllegalCrossThreadCalls = false; 19 } 20 21 private void bt_Click(object sender, EventArgs e) 22 { 23 Thread thread = new Thread(this.CopyFile); 24 thread.Start(); 25 26 } 27 private void CopyFile() 28 { 29 FileStream readstream = null; 30 FileStream writestream = null; 31 //源文件Textbox sf,目标文件Textbox mf 32 //源文件sfile,目标文件mfile 33 string sfile = this.sf.Text.Trim(); 34 string mfile = this.mf.Text.Trim(); 35 if(!File.Exists(sfile)) 36 { 37 MessageBox.Show("源文件不存在"); 38 return; 39 } 40 readstream = File.Open(sfile,FileMode.Open); 41 if (File.Exists(mfile)) 42 { 43 DialogResult dr = MessageBox.Show("是否要覆盖文件?", "警告", MessageBoxButtons.OKCancel); 44 if (dr == DialogResult.OK) 45 { 46 writestream = File.Open(mfile, FileMode.Truncate); 47 48 } 49 else 50 { 51 return; 52 } 53 } 54 else 55 { 56 writestream = File.Open(mfile,FileMode.Create); 57 58 } 59 byte[] bt = new byte[1024]; 60 int i = 0; 61 long count = readstream.Length; 62 int r = 0; 63 string str = ""; 64 while((i = readstream.Read(bt,0,bt.Length))!=0) 65 { 66 writestream.Write(bt,0,i); 67 r = r + i; 68 str = ((double)r / count * 100).ToString("0.0") + "%"; 69 //prola lable.Name用来显示复制的百分比 70 this.prola.Text = str; 71 //coula lable.Name用来显示文件的大小 72 this.coula.Text = count.ToString(); 73 //proba lable.Name用来显示复制的进程 74 this.probr.Maximum = (int)count; 75 this.probr.Value = r; 76 if(r == count) 77 { 78 this.probr.Value = 0; 79 } 80 81 } 82 83 } 84 } 85 }