Asp.Net中用流操作文件

时间:2022-09-16 09:30:23
 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技术交流群Asp.Net中用流操作文件