下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第C#FileStream實現(xiàn)大文件復(fù)制FileStream緩沖讀取和寫入可以提高性能。FileStream讀取文件的時候,是先將流放入內(nèi)存,經(jīng)Flush()方法后將內(nèi)存中(緩沖中)的數(shù)據(jù)寫入文件。如果文件非常大,勢必消耗性能。特封裝在FileHelper中以備不時之需。
參考文章:C#FileStream復(fù)制大文件。將該文章中提供的代碼稍作修改,原文中進行了強制類型轉(zhuǎn)換,如果文件很大,比如4G,就會出現(xiàn)溢出的情況,復(fù)制的結(jié)果字節(jié)丟失嚴重,導(dǎo)致復(fù)制文件和源文件大小不一樣。這里修改的代碼如下:
publicstaticclassFileHelper
///summary
///復(fù)制大文件
////summary
///paramname="fromPath"源文件的路徑/param
///paramname="toPath"文件保存的路徑/param
///paramname="eachReadLength"每次讀取的長度/param
///returns是否復(fù)制成功/returns
publicstaticboolCopyFile(stringfromPath,stringtoPath,inteachReadLength)
//將源文件讀取成文件流
FileStreamfromFile=newFileStream(fromPath,FileMode.Open,FileAccess.Read);
//已追加的方式寫入文件流
FileStreamtoFile=newFileStream(toPath,FileMode.Append,FileAccess.Write);
//實際讀取的文件長度
inttoCopyLength=0;
//如果每次讀取的長度小于源文件的長度分段讀取
if(eachReadLengthfromFile.Length)
byte[]buffer=newbyte[eachReadLength];
longcopied=0;
while(copied=fromFile.Length-eachReadLength)
toCopyLength=fromFile.Read(buffer,0,eachReadLength);
fromFile.Flush();
toFile.Write(buffer,0,eachReadLength);
toFile.Flush();
//流的當(dāng)前位置
toFile.Position=fromFile.Position;
copied+=toCopyLength;
intleft=(int)(fromFile.Length-copied);
toCopyLength=fromFile.Read(buffer,0,left);
fromFile.Flush();
toFile.Write(buffer,0,left);
toFile.Flush();
else
//如果每次拷貝的文件長度大于源文件的長度則將實際文件長度直接拷貝
byte[]buffer=newbyte[fromFile.Length];
fromFile.Read(buffer,0,buffer.Length);
fromFile.Flush();
toFile.Write(buffer,0,buffer.Length);
toFile.Flush();
fromFile.Close();
toFile.Close();
returntrue;
測試代碼:
classProgram
staticvoidMain(string[]args)
Stopwatchwatch=newStopwatch();
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é)果:
MD5校驗結(jié)果:
文件:D:\安裝文件\新建文件夾\SQLSVRENT_2008R2_CHS.iso
大小:4662884352字節(jié)
修改時間:2010年9月3日,10:41:26
MD5:D2BC1D35D987CC6CB8401BFB0A1E1BC9
SHA1:0EEFF017B21635DF33F33C47E31E911CB23390F7
CRC32:55AC3C56
文件:F:\SQLSVRENT_2008R2_CHS.iso
大小:4662884352字節(jié)
修改時間:2013年9月29日,10:51:39
MD5:D2BC1D35D987CC6CB84
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026吉安市新供商貿(mào)物流有限公司招募就業(yè)見習(xí)人員2人筆試參考題庫及答案解析
- 2026年西安市蓮湖第一學(xué)校招聘筆試備考題庫及答案解析
- 2026浙江麗水蓮都區(qū)投資促進中心招募見習(xí)生1人考試參考題庫及答案解析
- 2026上半年安徽事業(yè)單位聯(lián)考合肥市巢湖市招聘22人筆試備考試題及答案解析
- 2026湖南邵東市城區(qū)第五完全小學(xué)春季見習(xí)教師招聘考試參考題庫及答案解析
- 2026山東淄博文昌湖省級旅游度假區(qū)面向大學(xué)生退役士兵專項崗位招聘1人筆試模擬試題及答案解析
- 2026年家族辦公室運營培訓(xùn)
- 2026浙江大學(xué)醫(yī)學(xué)院附屬第一醫(yī)院江西醫(yī)院(江西省心血管神經(jīng)腫瘤醫(yī)學(xué)中心)高層次人才招聘27人(9)考試參考題庫及答案解析
- 首都師大附中科學(xué)城學(xué)校教師招聘考試備考題庫及答案解析
- 2026年甘肅嘉峪關(guān)市人力資源和社會保障局招聘公益性崗位考試參考題庫及答案解析
- DB5101∕T 214-2025 公園城市立體綠化技術(shù)指南
- 基本藥物培訓(xùn)課件資料
- 汪金敏 培訓(xùn)課件
- 物流公司托板管理制度
- 醫(yī)療護理操作評分細則
- 自考-經(jīng)濟思想史知識點大全
- 銀行資金閉環(huán)管理制度
- 2024年山東省胸痛中心質(zhì)控報告
- 中外航海文化知到課后答案智慧樹章節(jié)測試答案2025年春中國人民解放軍海軍大連艦艇學(xué)院
- dlt-5161-2018電氣裝置安裝工程質(zhì)量檢驗及評定規(guī)程
- 學(xué)習(xí)無人機航拍心得體會1000字
評論
0/150
提交評論