上一篇介绍了文件的一些基本操作,介绍了文件的加密操作。这一篇介绍一些文件流的操作
文件流类FileStream实现大文件拷贝
大文件拷贝之所以用文件流来进行拷贝,主要是由于如果用File静态类来执行拷贝就是将整个文件整体传输,对于一个好几个G的大文件会造成内存占用大,运行慢,效率不高。所以用到文件流拷贝。文件流拷贝可以设置拷贝的二进制流缓冲区的大小,然后根据缓冲区的大小来一点一点拷贝,就类似与U盘拷贝文件到电脑似的。
下面就介绍一下如何实现拷贝
source是源文件路径,target是目标文件路径
中间缓冲区的大小看自己所要传输的文件的大小,这里创建了一个10M的缓冲区。
<span style="font-family:Microsoft YaHei;font-size:18px;">//1、创建一个读取源文件的文件流 using (FileStream fsRead=new FileStream (source ,FileMode .Open ,FileAccess .Read )) { //2、创建一个写入目标文件的文件流 using (FileStream fsWrite=new FileStream (target ,FileMode.Create ,FileAccess .Write)) { //拷贝文件的时候,创建一个中间缓冲区 byte[] bytes = new byte[1024 * 1024 * 10]; //返回值表示本次实际读到的字节个数 int r = fsRead.Read(bytes, 0, bytes.Length); while (r>0) { //将读取到的内容写入到新文件 //第三个参数应该是实际读取到的字节数,而不是数组的长度 fsWrite.Write(bytes, 0, r); Console.Write("."); r = fsRead.Read(bytes, 0, bytes.Length); } } }</span>
Ps:
当用文件流FileStream来读取文本文档的时候,由于汉字是用2个字节编码,而字母是1个字节。对于一个固定的二进制字节流缓冲区,不能很好的区分汉字和字母,这样有可能缓冲区完毕之后最后一个汉字读到1个字节,这就是“半个汉字“这就出现了信息不完整的现象。所以这时读取文本文档就要用StreamWriter,StreamReader。
时间: 2024-11-09 14:38:57