一、基于Stream的大文件拷贝
1、代码:
using (FileStream outStream = new FileStream(@"c:\a.zip", FileMode.Create)){using (FileStream fs = new FileStream(@"c:\BorlandDelphi7.zip",FileMode.Open)){//byte[] bytes = new byte[1024];Read返回值表示实际读了多少内容//fs.Read(bytes, 0, bytes.Length);byte[] bytes = new byte[1024 * 1024 * 4];//缓冲区的大小。//缓冲区太小的话速度慢,伤硬盘//如果Read返回值大于0,说明还没有读完int readBytes;//实际读出的长度//练习:文件加密(每一位用255-r)//解释一下这句话// int j=(i=3);//bool b = (i=3)>0;while ((readBytes = fs.Read(bytes, 0, bytes.Length)) > 0){//list.AddRange(bytes);//因为最后一次可能没有把bytes读慢//所以把实际读取的数量做为第三个参数outStream.Write(bytes, 0, readBytes);//Thread.Sleep(1);}}Console.WriteLine(byte.MaxValue);Console.ReadKey();}
2、缓冲区的大小:缓冲区太小的话速度慢,伤硬盘。
3、用Stopwatch测试拷贝一个200MB的文件,
lengthEachTime=1024的时候28秒,
lengthEachTime=1024000的时候4秒。每次拷贝的字节数越多速度越快,太多了就又太占内存。因为每次拷贝、写都会导致磁头的启动、刹车,一次读写的越多启动、刹车次数一般越少。File.Copy没法控制每次读写的字节数。
二、使用Stream做文件加密
4、byte.Max-b