程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 利用C#的FileStream分段復制大文件

利用C#的FileStream分段復制大文件

編輯:關於C語言

即每次復制文件的一小段,以節省總內存開銷。當然,本機復制也可以采用.Net內部的System.IO.File.Copy方法。

Code

[copy to clipboard]

CODE:

/// <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();
    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved