溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在C#中利用FileStream實現(xiàn)大文件復制

發(fā)布時間:2021-05-31 17:57:47 來源:億速云 閱讀:274 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關(guān)怎么在C#中利用FileStream實現(xiàn)大文件復制,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

public static class FileHelper
 {
  /// <summary>
  /// 復制大文件
  /// </summary>
  /// <param name="fromPath">源文件的路徑</param>
  /// <param name="toPath">文件保存的路徑</param>
  /// <param name="eachReadLength">每次讀取的長度</param>
  /// <returns>是否復制成功</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();
  }
 
 }

結(jié)果:

怎么在C#中利用FileStream實現(xiàn)大文件復制

怎么在C#中利用FileStream實現(xiàn)大文件復制

看完上述內(nèi)容,你們對怎么在C#中利用FileStream實現(xiàn)大文件復制有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI