每次讀取/寫入固定大小緩衝區,避免一次性載入整個檔案導致記憶體壓力。本機複製亦可直接用 File.Copy,此處示範手動控制流程。

private void CopyFile(string fromFile, string toFile, int lengthEachTime)
{
using (var fsSrc = new FileStream(fromFile, FileMode.Open, FileAccess.Read))
using (var fsDst = new FileStream(toFile, FileMode.Append, FileAccess.Write))
{
if (lengthEachTime < fsSrc.Length) // 分段複製
{
byte[] buffer = new byte[lengthEachTime];
int copied = 0;
while (copied <= fsSrc.Length - lengthEachTime)
{
int read = fsSrc.Read(buffer, 0, lengthEachTime);
fsSrc.Flush();
fsDst.Write(buffer, 0, lengthEachTime);
fsDst.Flush();
fsDst.Position = fsSrc.Position;
copied += read;
}
// 複製剩餘部分
int left = (int)fsSrc.Length - copied;
fsSrc.Read(buffer, 0, left);
fsSrc.Flush();
fsDst.Write(buffer, 0, left);
fsDst.Flush();
}
else // 整體複製
{
byte[] buffer = new byte[fsSrc.Length];
fsSrc.Read(buffer, 0, (int)fsSrc.Length);
fsSrc.Flush();
fsDst.Write(buffer, 0, (int)fsSrc.Length);
fsDst.Flush();
}
}
}
lengthEachTime,建議 4KB~1MB 視情況調整。fsDst.Position = fsSrc.Position 確保讀寫位置一致。此模式適用於大檔案傳輸、斷點續傳基礎、網路串流儲存等場景。