C# FileStream复制大文件

本文实例为大家分享了C# FileStream复制大文件的具体代码,供大家参考,具体内容如下

即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。

/// <summary>

/// 复制文件

/// </summary>

/// <param name="fromFile">要复制的文件</param>

/// <param name="toFile">要保存的位置</param>

 /// <param name="lengthEachTime">每次复制的长度</param>

    private void CopyFile(string fromFile, string toFile, int lengthEachTime)

    {

      FileStream fileToCopy = new FileStream(fromFile, FileMode.Open, FileAccess.Read);

      FileStream copyToFile = new FileStream(toFile, FileMode.Append, FileAccess.Write);

      int lengthToCopy;

      if (lengthEachTime < fileToCopy.Length)//如果分段拷贝,即每次拷贝内容小于文件总长度

      {

        byte[] buffer = new byte[lengthEachTime];

        int copied = 0;

        while (copied <= ((int)fileToCopy.Length - lengthEachTime))//拷贝主体部分

        {

          lengthToCopy = fileToCopy.Read(buffer, 0, lengthEachTime);
          fileToCopy.Flush();
          copyToFile.Write(buffer, 0, lengthEachTime);
          copyToFile.Flush();
          copyToFile.Position = fileToCopy.Position;
          copied += lengthToCopy;

        }

        int left = (int)fileToCopy.Length - copied;//拷贝剩余部分
        lengthToCopy = fileToCopy.Read(buffer, 0, left);
        fileToCopy.Flush();
        copyToFile.Write(buffer, 0, left);
        copyToFile.Flush();

      }

      else//如果整体拷贝,即每次拷贝内容大于文件总长度

      {

        byte[] buffer = new byte[fileToCopy.Length];
        fileToCopy.Read(buffer,0,(int)fileToCopy.Length);
        fileToCopy.Flush();
        copyToFile.Write(buffer, 0, (int)fileToCopy.Length);
        copyToFile.Flush();

      }

      fileToCopy.Close();
      copyToFile.Close();

    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C# FileStream复制大文件功能

    FileStream缓冲读取和写入可以提高性能.每次复制文件的一小段,以节省总内存开销.当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法. FileStream读取文件的时候,是先讲流放入内存,经Flash()方法后将内存中(缓冲中)的数据写入文件.如果文件非常大,势必消耗性能.特封装在FileHelper中以备不时之需.强制类型转换,如果文件很大,比如4G,就会出现溢出的情况,复制的结果字节丢失严重,导致复制文件和源文件大小不一样.这里修改的代码如下: publ

  • C# FileStream实现大文件复制

    FileStream缓冲读取和写入可以提高性能.FileStream读取文件的时候,是先将流放入内存,经Flush()方法后将内存中(缓冲中)的数据写入文件.如果文件非常大,势必消耗性能.特封装在FileHelper中以备不时之需. 参考文章:C# FileStream复制大文件.将该文章中提供的代码稍作修改,原文中进行了强制类型转换,如果文件很大,比如4G,就会出现溢出的情况,复制的结果字节丢失严重,导致复制文件和源文件大小不一样.这里修改的代码如下: public static class

  • C#使用FileStream复制一个任意文件

    FileStream,顾名思义,文件流.流,是字节流.我的理解是,硬盘上存在一个字节流,内存里也有一个字节流,它们是对应的.程序运行时,我们只能对内存里的字节流直接操作,在它被关闭的时候,它的内容自动写入硬盘上的相应字节流. 复制一个文件的基本思路是:逐一读取原文件流的字节,逐一写入新文件流中.分别用到文件流的ReadByte()和WriteByte()方法.这里要注意的是,读取时以字节为单位,一个字节如下图所示 是一个0和1组合的序列.ReadByte()读取一个字节后将这个序列求值,返回的是

  • C# FileStream复制大文件

    本文实例为大家分享了C# FileStream复制大文件的具体代码,供大家参考,具体内容如下 即每次复制文件的一小段,以节省总内存开销.当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法. /// <summary> /// 复制文件 /// </summary> /// <param name="fromFile">要复制的文件</param> /// <param name="toFile

  • C#使用FileStream循环读取大文件数据的方法示例

    本文实例讲述了C#使用FileStream循环读取大文件数据的方法.分享给大家供大家参考,具体如下: 今天学习了FileStream的用法,用来读取文件流,教程上都是读取小文件,一次性读取,但是如果遇到大文件,那么我们就需要循环读取文件. 直接上代码. 引用命名空间 using System.IO; 下面就是循环读取大文件的代码 class Program { static void Main(string[] args) { //循环读取大文本文件 FileStream fsRead; //获

  • 几分钟搞懂c#之FileStream对象读写大文件(推荐)

    还是一样,我先上代码,但是为了你们测试结果和我一样,必须先有准备工作,否则会找不到目录或者文件就没有效果: 既然是读取大文件,那么这个文本必须存在 现在来看目标目录 其实这里的文本文件可以删除,因为我们写入文本数据的时候的模式是当没有找到文件就创建新的. 下面上的上代码 "` using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text; na

  • 使用mmap实现大文件的复制(单进程和多进程)

    使用mmap实现大文件的复制,供大家参考,具体内容如下 典型的文件复制的流程是: 1.读取(fread)被复制的文件的内容. 2.写入(fwrite)到新的文件中去. 使用mmap进行文件复制的流程则是: 1.为被复制的文件已经新文件分别进行mmap映射. 2.将被复制的文件映射的内存的内容复制到新文件映射的内存. 在知道了基本原理之后,让我们看看具体的做法,本文只分析使用mmap进行大文件复制的方法 具体的做法 先了解一些使用mmap时,应当注意的细节: 文件的大小必须要大于等于内存映射区的大

  • ASP.Net下载大文件的实现方法

    本文实例讲述了ASP.Net下载大文件的实现方法.分享给大家供大家参考.具体分析如下: 当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 1. 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据. 2. 根据下载的文件类型来指定 Response.ContentType .(参考OSChina的这个网址可以找到大部分文件类型的对照表:http://tool.oschi

  • c#通过DES加密算法加密大文件的方法

    本文实例讲述了c#通过DES加密算法加密大文件的方法.分享给大家供大家参考.具体实现方法如下: using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using Syst

  • HTTP协议下用Web Service上传大文件的解决方案

    用HTTP协议上传大文件也许是个不好办的问题.主要是它的不连续性,使得上传文件感觉很"危险".特别是很大的文件(几百MB甚至是上G的文件),心里总觉得不踏实,一不小心就会出现问题,而一但出现问题就无法继续上传,这是很郁闷的. 后来在一些网站上找到一些上传文件的组件,但都是要用到一些COM组件.至于后来的ASP.net下上传大文件的解决方案,我也做过一个组件,后来发现根本就不用自己写什么组件,利用ASP.net自己的上传方法也可以解决大文件上传,真是郁闷的要死了.... 回想之后,决定用

随机推荐