用FileStream来复制文件
一个用FileStream来复制文件的小程序
相比用File.Copy()方法,我觉得有两个好处
1:可以实时显示文件进度
2:当文件拷贝到一半发生异常时不会造成目标文件不可用,(用FileStream,文件可播放已拷贝部分的片段)
贴上代码:
1 private void button1_Click(object sender, EventArgs e)
2 {
3 FileStream fsr = null;
4 FileStream fsw = null;
5 try
6 {
7 this.progressBar1.Maximum =100;
8 fsr = new FileStream(this.textBox1.Text, FileMode.Open);
9 fsw = new FileStream(this.textBox2.Text, FileMode.Create);
10 byte[] bt = new byte[1024*1024];
11 int rcount = 0;
12 do
13 {
14 Application.DoEvents();
15 rcount = fsr.Read(bt, 0, bt.Length);
16 fsw.Write(bt, 0, rcount);
17 //this.progressBar1.Value = Convert.ToInt32(fsw.Length);
18 this.progressBar1.Value = ((int)(((float)fsw.Length / (float)fsr.Length)*100 )) ;
19 Application.DoEvents();
20 } while (rcount != 0);
21 fsr.Close();
22 fsw.Close();
23 }
24 catch (Exception ex)
25 {
26 if (fsr != null)
27 {
28 fsr.Close();
29 fsr = null;
30 }
31 if (fsw != null)
32 {
33 fsw.Close();
34 fsw = null;
35 }
36 MessageBox.Show(ex.ToString());
37 }
38 }
39
2 {
3 FileStream fsr = null;
4 FileStream fsw = null;
5 try
6 {
7 this.progressBar1.Maximum =100;
8 fsr = new FileStream(this.textBox1.Text, FileMode.Open);
9 fsw = new FileStream(this.textBox2.Text, FileMode.Create);
10 byte[] bt = new byte[1024*1024];
11 int rcount = 0;
12 do
13 {
14 Application.DoEvents();
15 rcount = fsr.Read(bt, 0, bt.Length);
16 fsw.Write(bt, 0, rcount);
17 //this.progressBar1.Value = Convert.ToInt32(fsw.Length);
18 this.progressBar1.Value = ((int)(((float)fsw.Length / (float)fsr.Length)*100 )) ;
19 Application.DoEvents();
20 } while (rcount != 0);
21 fsr.Close();
22 fsw.Close();
23 }
24 catch (Exception ex)
25 {
26 if (fsr != null)
27 {
28 fsr.Close();
29 fsr = null;
30 }
31 if (fsw != null)
32 {
33 fsw.Close();
34 fsw = null;
35 }
36 MessageBox.Show(ex.ToString());
37 }
38 }
39