C#實現大檔案的分割複製
使用FileStream類將檔案以指定的檔案流大小進行分割,追加到一個同名的空檔案,該類支援非同步操作,例項程式碼分享
例:
Public void Copyfile(stringFormerfile,string tofile,int sectsize)
{
FileStreamfiletocreate=new FileStream(tofile,FileMode.Create); //建立目的檔案,如果已存在則覆蓋
filetocreate.Close(); //關閉所有資源
filetocreate.Dispose(); //釋放所有資源
FormerOpen=newFileStream(FormerFile,FileMode.Open,FileAccess.Read);
//以只讀方式開啟原始檔
Tofileopen=newFileStream(tofile,FileMode.Append,FileAccess.Write);
//以寫方式開啟目的檔案
//根據一次傳輸的大小,計算傳輸的個數
Int Fileesize; //要複製檔案的大小
//如果分段複製,即每次複製內容小於檔案總長度
If(sectsize<FormerOpen.Length)
{
byte[]buffer=new byte[sectsize];
Int copied=0; //記錄傳輸的大小
While(copied<=((int)FormerOpen.Length-sectsize))
{
FileSize=FormerOpen.Read(buffer,0,sectsize); //從0開始讀,每次最大讀sectsize
FormerOpen.Flush(); //清空快取
Tofileopen.Write(buffer,0,sectsize); //向目的檔案寫入位元組
TofileOpen.Flush();
Tofileopen.Position=FormerOpen.Position;//使原始檔和目的檔案流的位置相同
copied+=FileSize; //記錄已複製的大小
}
Int left=(int)FormerOpen.Length-copied; //獲取剩餘大小
FileSize=FormerOpen.Read(buffer,0,left);//讀取剩餘的位元組
FormerOpen.Flush();
Tofileopen.Write(buffer,0,left);
tofileOpen.Flush();
}
//如果整體複製
Else
{
Byte[] buffer=new byte[FormerOpen.Length];
FormerOpen.Read(buffer,0,(int)FormerOpen.Length);
FormerOpen.Flush();
Tofileopen.Write(buffer,0,(int)FormerOpen.Length);
Tofileopen.Flush();
}
FormerOpen.Close(); // 釋放所有資源
tofileOpen.close();
}