I/O(7)——基于Stream的大文件拷贝、使用Stream做文件加密

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

上一篇:C#读写txt文件方法汇总


下一篇:c# – 为什么FileStream不作为Streamwriter的参数写入文本文件?