這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何在C#中使用FileStream復(fù)制大文件,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括巴南網(wǎng)站建設(shè)、巴南網(wǎng)站制作、巴南網(wǎng)頁(yè)制作以及巴南網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,巴南網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到巴南省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!FileStream緩沖讀取和寫(xiě)入可以提高性能。每次復(fù)制文件的一小段,以節(jié)省總內(nèi)存開(kāi)銷(xiāo)。當(dāng)然,本機(jī)復(fù)制也可以采用.NET內(nèi)部的System.IO.File.Copy方法。
FileStream讀取文件的時(shí)候,是先講流放入內(nèi)存,經(jīng)Flash()方法后將內(nèi)存中(緩沖中)的數(shù)據(jù)寫(xiě)入文件。如果文件非常大,勢(shì)必消耗性能。特封裝在FileHelper中以備不時(shí)之需。強(qiáng)制類(lèi)型轉(zhuǎn)換,如果文件很大,比如4G,就會(huì)出現(xiàn)溢出的情況,復(fù)制的結(jié)果字節(jié)丟失嚴(yán)重,導(dǎo)致復(fù)制文件和源文件大小不一樣。這里修改的代碼如下:
public static class FileHelper { /// <summary> /// 復(fù)制大文件 /// </summary> /// <param name="fromPath">源文件的路徑</param> /// <param name="toPath">文件保存的路徑</param> /// <param name="eachReadLength">每次讀取的長(zhǎng)度</param> /// <returns>是否復(fù)制成功</returns> public static bool CopyFile(string fromPath, string toPath, int eachReadLength) { //將源文件 讀取成文件流 FileStream fromFile = new FileStream(fromPath, FileMode.Open, FileAccess.Read); //已追加的方式 寫(xiě)入文件流 FileStream toFile = new FileStream(toPath, FileMode.Append, FileAccess.Write); //實(shí)際讀取的文件長(zhǎng)度 int toCopyLength = 0; //如果每次讀取的長(zhǎng)度小于 源文件的長(zhǎng)度 分段讀取 if (eachReadLength < fromFile.Length) { byte[] buffer = new byte[eachReadLength]; long copied = 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; } int left = (int)(fromFile.Length - copied); toCopyLength = fromFile.Read(buffer, 0, left); fromFile.Flush(); toFile.Write(buffer, 0, left); toFile.Flush(); } else { //如果每次拷貝的文件長(zhǎng)度大于源文件的長(zhǎng)度 則將實(shí)際文件長(zhǎng)度直接拷貝 byte[] buffer = new byte[fromFile.Length]; fromFile.Read(buffer, 0, buffer.Length); fromFile.Flush(); toFile.Write(buffer, 0, buffer.Length); toFile.Flush(); } fromFile.Close(); toFile.Close(); return true; } }
測(cè)試代碼:
class Program { static void Main(string[] args) { Stopwatch watch = new Stopwatch(); watch.Start(); if (FileHelper.CopyFile(@"D:\安裝文件\新建文件夾\SQLSVRENT_2008R2_CHS.iso", @"F:\SQLSVRENT_2008R2_CHS.iso", 1024 * 1024 * 5)) { watch.Stop(); Console.WriteLine("拷貝完成,耗時(shí):" + watch.Elapsed.Seconds + "秒"); } Console.Read(); } }
C#是一個(gè)簡(jiǎn)單、通用、面向?qū)ο蟮木幊陶Z(yǔ)言,它由微軟Microsoft開(kāi)發(fā),繼承了C和C++強(qiáng)大功能,并且去掉了一些它們的復(fù)雜特性,C#綜合了VB簡(jiǎn)單的可視化操作和C++的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語(yǔ)法風(fēng)格、創(chuàng)新的語(yǔ)言特性和便捷的面向組件編程從而成為.NET開(kāi)發(fā)的選語(yǔ)言,但它不適用于編寫(xiě)時(shí)間急迫或性能非常高的代碼,因?yàn)镃#缺乏性能極高的應(yīng)用程序所需要的關(guān)鍵功能。
上述就是小編為大家分享的如何在C#中使用FileStream復(fù)制大文件了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站題目:如何在C#中使用FileStream復(fù)制大文件-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://m.newbst.com/article28/dcipcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、響應(yīng)式網(wǎng)站、Google、網(wǎng)站內(nèi)鏈、用戶(hù)體驗(yàn)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)