一、基于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