C#谈文件操作NO2(大文件拷贝)

上一篇介绍了文件的一些基本操作,介绍了文件的加密操作。这一篇介绍一些文件流的操作

文件流类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

C#谈文件操作NO2(大文件拷贝)的相关文章

文件操作1创建文件

1.[[email protected] ]# vi list     #如果testfile不存在,则vi会自动创建一个名为testfile的文件,并在Vi打开该文件等待用户输入内容. 2.[[email protected] ]# ls -l >listfile #利用重定向,将ls -l 的执行结果输出到新文件listfile中,也可使用cat,more,less或其它命令结合重向运算符>来生成新文件 3.[[email protected] ]# cp file  file2   #复

一起talk C栗子吧( 第一百四十回:C语言实例--文件操作:基于文件描述符三)

各位看官们,大家好,上一回中咱们说的是基于文件描述符进行文件操作的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中详细地介绍了文件操作相关的系统调用.不过,没有举具体的例子.我们的主要内容就是举例子,因此,今天我们将通过具体的例子来说明如果使用系统调用来操作文件. 对文件的操作,还是使用我总结的文件操作三步曲比较好: fd = open(file_name,flags_read); //打开文件 fd = open(file_name,fl

文件操作之打开文件

一.打开文件 obj = open('文件路径','打开文件方式') 打开文件方式有: r:只读方式 r+:相当于rw w:写入方式 w+:仍然等于w,无意义 a:追加方式 a+:仍然等于a,无意义 open()是Python的内建函数,提供了初始化输入/输出(I/O)的操作通用接口,成功打开一个文件后返回一个对象,否则发生IOError异常,file()是一个工厂函数,与open方法一样,可以互换,但是一般推荐用open(),因为open()是Python内建函数.file后期会被合并掉其他函

一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)

各位看官们,大家好,上一回中咱们说的是基于文件指针进行文件操作的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中详细地介绍了标准库中与文件操作相关的函数.不过,限于时间的原因,没有举具体的例子.还是那句老话,只说不练,不是我们的风格.因此,今天我们将通过具体的例子来说明如何使用文件指针来操作文件. 对文件的操作,还是使用我总结的文件操作三步曲比较好: p_file = fopen(file_name,"w"); //打开文件 re

PHP 文件操作类(创建文件并写入) 生成日志

<?php /** * 文件操作(生成日志)支持多条插入 * (如果插入多条语句并换行 用','逗号分开) * */ class log { public $path = './info.txt'; //默认值文件 public $mode = 'a'; //默认追加写 public $content = '默认值:空'; //默认内容是 空 public function addlog($path = null, $mode = null, $content = null) { //判断写入的

关于file文件操作的头文件 【LINUX】 (转载)

转自:http://blog.csdn.net/figo77ll/article/details/3156052 Linux下如果要对文件进行读取访问,需要包含至少以下两个头文件: #inlcude <unistd.h> #inlcude <fcntl.h> 其中fcntl.h包含了create和open命令,unistd包含了其他的诸如read, write, close等命令.很奇怪为什么不把fcntl的功能直接放到unistd里面呢.. 如果要对STDIN,STDOUT进行“

java文件操作之移动文件到指定的目录

原文:java文件操作之移动文件到指定的目录 代码下载地址:http://www.zuidaima.com/share/1550463261166592.htm java文件操作之移动文件到指定的目录,通过renameTo方法实现,而非copy后delete package com.zuidaima.util.file; import java.io.File; /** * 移动文件到指定的目录 * * @author www.zuidaima.com * */ public class Mov

C#谈文件操作NO1(文件加密)

第一篇介绍一下C#文件的一些常用操作 最常用的基本操作有:(1)文件类File(2)文件夹类Directory(3)文件信息类FileInfo(4)文件夹信息类DirectoryInfo 流操作:(1)文件流类:FileStream(2)流写入类StreamWriter(3)流读取类StreamReader(4)二进制流写入类BinaryWriter(5)二进制流读取类BinaryReader 静态类 File 文件类的操作 (1)文件的创建和打开 (2)复制文件 (3)删除文件 (4)文件的加

Python:文件操作总结1——文件基本操作

一.文件的操作流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 二.文件的打开与关闭 A.文件的打开--open函数 语法:open(file[,mode[,buffering[,encoding[,errors[,newline[,closefd=True]]]]]]) [参数说明]: file--文件的位置+文件的名字,需要加引号 [注]:若不指明文件的位置,则默认其位于当前文件夹下 mode--文件的的打开模式 buffering--可以取0,1,