欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# FileStream復(fù)制大文件功能

 更新時間:2019年05月04日 09:03:45   投稿:lijiao  
這篇文章主要為大家詳細介紹了C# FileStream復(fù)制大文件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

FileStream緩沖讀取和寫入可以提高性能。每次復(fù)制文件的一小段,以節(jié)省總內(nèi)存開銷。當(dāng)然,本機復(fù)制也可以采用.NET內(nèi)部的System.IO.File.Copy方法。

FileStream讀取文件的時候,是先講流放入內(nèi)存,經(jīng)Flash()方法后將內(nèi)存中(緩沖中)的數(shù)據(jù)寫入文件。如果文件非常大,勢必消耗性能。特封裝在FileHelper中以備不時之需。強制類型轉(zhuǎn)換,如果文件很大,比如4G,就會出現(xiàn)溢出的情況,復(fù)制的結(jié)果字節(jié)丟失嚴重,導(dǎo)致復(fù)制文件和源文件大小不一樣。這里修改的代碼如下:

public static class FileHelper
  {
    /// <summary>
    /// 復(fù)制大文件
    /// </summary>
    /// <param name="fromPath">源文件的路徑</param>
    /// <param name="toPath">文件保存的路徑</param>
    /// <param name="eachReadLength">每次讀取的長度</param>
    /// <returns>是否復(fù)制成功</returns>
    public static bool CopyFile(string fromPath, string toPath, int eachReadLength)
    {
      //將源文件 讀取成文件流
      FileStream fromFile = new FileStream(fromPath, FileMode.Open, FileAccess.Read);
      //已追加的方式 寫入文件流
      FileStream toFile = new FileStream(toPath, FileMode.Append, FileAccess.Write);
      //實際讀取的文件長度
      int toCopyLength = 0;
      //如果每次讀取的長度小于 源文件的長度 分段讀取
      if (eachReadLength < fromFile.Length)
      {
        byte[] buffer = new byte[eachReadLength];
        long copied = 0;
        while (copied <= fromFile.Length - eachReadLength)
        {
          toCopyLength = fromFile.Read(buffer, 0, eachReadLength);
          fromFile.Flush();
          toFile.Write(buffer, 0, eachReadLength);
          toFile.Flush();
          //流的當(dāng)前位置
          toFile.Position = fromFile.Position;
          copied += toCopyLength;
        }
        int left = (int)(fromFile.Length - copied);
        toCopyLength = fromFile.Read(buffer, 0, left);
        fromFile.Flush();
        toFile.Write(buffer, 0, left);
        toFile.Flush();
 
      }
      else
      {
        //如果每次拷貝的文件長度大于源文件的長度 則將實際文件長度直接拷貝
        byte[] buffer = new byte[fromFile.Length];
        fromFile.Read(buffer, 0, buffer.Length);
        fromFile.Flush();
        toFile.Write(buffer, 0, buffer.Length);
        toFile.Flush();
 
      }
      fromFile.Close();
      toFile.Close();
      return true;
    }
  }

測試代碼:

class Program
  {
    static void Main(string[] args)
    {
 
      Stopwatch watch = new Stopwatch();
      watch.Start();
      if (FileHelper.CopyFile(@"D:\安裝文件\新建文件夾\SQLSVRENT_2008R2_CHS.iso", @"F:\SQLSVRENT_2008R2_CHS.iso", 1024 * 1024 * 5))
      {
        watch.Stop();
        Console.WriteLine("拷貝完成,耗時:" + watch.Elapsed.Seconds + "秒");
      }
      Console.Read();
    }
  }


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#?9使用foreach擴展的示例詳解

    C#?9使用foreach擴展的示例詳解

    在?C#?9?中,foreach?循環(huán)可以使用擴展方法。在本文中,我們將通過例子回顧?C#?9?中如何擴展?foreach?循環(huán),感興趣的小伙伴可以了解一下
    2023-01-01
  • C#編程獲取客戶端計算機硬件及系統(tǒng)信息功能示例

    C#編程獲取客戶端計算機硬件及系統(tǒng)信息功能示例

    這篇文章主要介紹了C#編程獲取客戶端計算機硬件及系統(tǒng)信息功能,可實現(xiàn)針對客戶端系統(tǒng)CPU、硬盤、主板等硬件信息及客戶端操作系統(tǒng)、IP、MAC等信息的操作技巧,需要的朋友可以參考下
    2017-01-01
  • C# OleDbDataReader快速數(shù)據(jù)讀取方式(3種)

    C# OleDbDataReader快速數(shù)據(jù)讀取方式(3種)

    這篇文章主要介紹了C# OleDbDataReader快速數(shù)據(jù)讀取方式(3種),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#面向?qū)ο筇卣鞯木唧w實現(xiàn)及作用詳解

    C#面向?qū)ο筇卣鞯木唧w實現(xiàn)及作用詳解

    所有的面相對象思想,歸根結(jié)底是為了簡化代碼,減少代碼量,構(gòu)建更符合現(xiàn)實生活邏輯的程序代碼,從而減輕程序員的負擔(dān)。不能一味地或者說刻意地去使用面相對象的思想而忽略了程序所實現(xiàn)的功能或者框架,要根據(jù)實際情況
    2013-10-10
  • C#使用FluentHttpClient實現(xiàn)請求WebApi

    C#使用FluentHttpClient實現(xiàn)請求WebApi

    FluentHttpClient 是一個REST API 異步調(diào)用 HTTP 客戶端,調(diào)用過程非常便捷,下面我們就來學(xué)習(xí)一下C#如何使用FluentHttpClient實現(xiàn)請求WebApi吧
    2023-12-12
  • C#常見算法面試題小結(jié)

    C#常見算法面試題小結(jié)

    這篇文章主要介紹了C#常見算法面試題,包含了常見的排序、字符串操作、類的操作等技巧,需要的朋友可以參考下
    2014-09-09
  • C#逐行讀取文件的方法

    C#逐行讀取文件的方法

    這篇文章主要介紹了C#逐行讀取文件的方法,針對較大文件的讀取非常實用,需要的朋友可以參考下
    2015-07-07
  • 枚舉的用法詳細總結(jié)

    枚舉的用法詳細總結(jié)

    本篇文章主要是對枚舉的用法進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C#使用TimeSpan時間計算的簡單實現(xiàn)

    C#使用TimeSpan時間計算的簡單實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于C#使用TimeSpan時間計算的相關(guān)資料,以及通過一個實例代碼給大家介紹了C#使用timespan和timer完成一個簡單的倒計時器的方法,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • c#構(gòu)造初始化的順序淺析

    c#構(gòu)造初始化的順序淺析

    這篇文章介紹了c#構(gòu)造初始化的順序,有需要的朋友可以參考一下
    2013-08-08

最新評論