欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊: 次

FileStream緩沖讀取和寫入可以提高性能。每次復(fù)制文件的一小段,以節(jié)省總內(nèi)存開銷。當然,本機復(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();
          //流的當前位置
          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é)習有所幫助,也希望大家多多支持我們。

上一篇:C#實現(xiàn)炫酷啟動圖-動態(tài)進度條效果

欄    目:C#教程

下一篇:C#編程中常見數(shù)據(jù)結(jié)構(gòu)的比較(Unity3D游戲開發(fā))

本文標題:C# FileStream復(fù)制大文件功能

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/4756.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有