Asp.Net中用流操作文件

来源:互联网 发布:警惕网络诈骗 编辑:程序博客网 时间:2024/06/06 01:54
 byte[] bytes = File.ReadAllBytes(@"c:\BorlandDelphi7.zip");          File.WriteAllBytes(@"c:\a.zip", bytes);

有用过这种方式来读取文件的。

这种方式的弊端在于,先是把文件整个读取出来,放入内存,然后再写入硬盘。如果文件太大,而且内存不够大的话,有可能造成死机现象,而且速度相对来说比较慢。


流操作:

  什么是流,通俗来说就是读一点写一点,而且这个一点,是可以控制的,我可以让他一次读取1M或者10M或者100M都可以。

控制读取文件大小 这个就是缓冲区,设置缓冲区不可以太小,当然也不可以太大,适当就好,太小了会频繁读写硬盘,对硬盘损害加大,太大了也会拖慢速度。设置适当就可以。

个人建议8M开始。

 static void Main(string[] args)        {                        using (FileStream outStream = new FileStream(@"c:\a.zip", FileMode.Create))//通过FileMode.Create标明是写入流            {                using (FileStream fs = new FileStream(@"c:\BorlandDelphi7.zip",FileMode.Open))//通过FileMode.Open标明是读取流                {                                       ////Read返回值表示实际读了多少内容                    //fs.Read(bytes, 0, bytes.Length);                    byte[] bytes = new byte[1024 * 1024 * 4];//缓冲区的大小。就是一次读取多少内容                    //缓冲区太小的话速度慢,伤硬盘                    //如果Read返回值大于0,说明还没有读完                    int readBytes;//实际读出的长度                                                          //Read和SqlDataReader的Read一样,是每次Read指针后移                    //错误:int readBytes=fs.Read(....)                    //while(readBytes>0)                    //第二个参数offset表示当前位置的偏移量,一般都传0                    while ((readBytes = fs.Read(bytes, 0, bytes.Length)) > 0)                    {                                                //因为最后一次可能没有把bytes读慢                        //所以把实际读取的数量做为第三个参数                        outStream.Write(bytes, 0, readBytes);                        //Thread.Sleep(1);//线程挂起时间                    }                }                          }           

如果相直观的看到流,可以在读取一个缓冲区大小文件后让线程挂起一下,然后刷新文件夹来查看此时写入的文件的大小的变化。

线程挂起

Thread.Sleep(1);



欢迎加入.net技术交流群.Net技术交流


0 0
原创粉丝点击