1. 程式人生 > >C#實現大檔案的分割複製

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

}