亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

public static class FileHelper
  {
    /// <summary>
    /// 復(fù)制大文件
    /// </summary>
    /// <param name="fromPath">源文件的路徑</param>
    /// <param name="toPath">文件保存的路徑</param>
    /// <param name="eachReadLength">每次讀取的長(zhǎng)度</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);
      //實(shí)際讀取的文件長(zhǎng)度
      int toCopyLength = 0;
      //如果每次讀取的長(zhǎng)度小于 源文件的長(zhǎng)度 分段讀取
      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
      {
        //如果每次拷貝的文件長(zhǎng)度大于源文件的長(zhǎng)度 則將實(shí)際文件長(zhǎng)度直接拷貝
        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;
    }
  }

測(cè)試代碼:

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("拷貝完成,耗時(shí):" + watch.Elapsed.Seconds + "秒");
      }
      Console.Read();
    }
  }


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

相關(guān)文章

  • C#?9使用foreach擴(kuò)展的示例詳解

    C#?9使用foreach擴(kuò)展的示例詳解

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

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

    這篇文章主要介紹了C#編程獲取客戶端計(jì)算機(jī)硬件及系統(tǒng)信息功能,可實(shí)現(xiàn)針對(duì)客戶端系統(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種),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#面向?qū)ο筇卣鞯木唧w實(shí)現(xiàn)及作用詳解

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

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

    C#使用FluentHttpClient實(shí)現(xiàn)請(qǐng)求WebApi

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

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

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

    C#逐行讀取文件的方法

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

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

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

    C#使用TimeSpan時(shí)間計(jì)算的簡(jiǎn)單實(shí)現(xiàn)

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

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

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

最新評(píng)論