c++實(shí)現(xiàn)合并文件以及拆分實(shí)例代碼
本文主要研究的是c++實(shí)現(xiàn)合并文件以及拆分的相關(guān)內(nèi)容,分享了實(shí)現(xiàn)代碼,具體如下。
昨天看到一篇介紹TFS的文章,大意是為了處理海量圖片,采用分布式架構(gòu),將小圖片合并為大的文件
興趣驅(qū)使下,寫(xiě)了一個(gè)簡(jiǎn)單的文件合并拆分程序
合并的方法很簡(jiǎn)單,將小文件寫(xiě)入到大文件中,使用二進(jìn)制的方式。在大文件頭,用一個(gè)int記錄合并進(jìn)來(lái)的小文件的數(shù)量,接下來(lái),一塊一塊的寫(xiě)入小文件。
每一塊都分為三個(gè)部分,第一部分是文件的名稱(chēng),用20個(gè)char 來(lái)記錄;第二部分用一個(gè)int來(lái)記錄小文件的長(zhǎng)度;第三部分則是小文件的實(shí)際內(nèi)容
這樣,在拆分時(shí),通過(guò)文件頭部獲得小文件的數(shù)量,然后逐個(gè)獲取名稱(chēng),文件長(zhǎng)度以及內(nèi)容
附上源代碼
合并:
void Merge() { char name[20]; string str1 = "F:/數(shù)據(jù)/1.jpg"; string str2 = "F:/數(shù)據(jù)/2.jpg"; string strBlock = "F:/數(shù)據(jù)/BLOCK.dat"; FILE* f1 = fopen(str1.c_str(),"rb+"); FILE* f2 = fopen(str2.c_str(),"rb+"); FILE* f3 = fopen(strBlock.c_str(),"rb+"); // 獲取文件的長(zhǎng)度 int iLen1 =filelength(fileno(f1)); int iLen2 = filelength(fileno(f2)); char *buf1 = new char[iLen1]; memset(buf1,0x0,iLen1); char *buf2 = new char[iLen2]; memset(buf2,0x0,iLen2); // 獲取文件內(nèi)容 fread(buf1,iLen1,1,f1); fread(buf2,iLen2,1,f2); fclose(f1); fclose(f2); // 在文件頭記錄合并文件的個(gè)數(shù) int iCount = 2; fseek(f3,0,SEEK_SET); fwrite(&iCount,sizeof(int),1,f3); // 寫(xiě)入第一個(gè)文件 memset(name,0x0,20); strcpy(name,str1.c_str()); fwrite(name,20,1,f3); fwrite(&iLen1,sizeof(int),1,f3); fwrite(buf1,iLen1,1,f3); // 寫(xiě)入第二個(gè)文件 memset(name,0x0,20); strcpy(name,str2.c_str()); fwrite(name,20,1,f3); fwrite(&iLen2,sizeof(int),1,f3); fwrite(buf2,iLen2,1,f3); fclose(f3); //刪除申請(qǐng)的內(nèi)存 delete[] buf1; delete[] buf2; }
拆分:
void Split() { char name[20]; string strBlock = "F:/數(shù)據(jù)/BLOCK.dat"; FILE* f3 = fopen(strBlock.c_str(),"rb+"); // 獲取文件數(shù)量 int iCount = 0; fseek(f3,0,SEEK_SET); fread(&iCount,sizeof(int),1,f3); for(int i=0;i<iCount;i++) { memset(name,0x0,20); fread(&name,20,1,f3); // 輸出名稱(chēng) cout<<name<<endl; int iLen = 0; // 讀取文件長(zhǎng)度 fread(&iLen,sizeof(int),1,f3); char *buff = new char[iLen]; // 讀取文件內(nèi)容 fread(buff,iLen,1,f3); char fileLen[10]; sprintf(fileLen, "%d", iLen); // 以文件長(zhǎng)度做名稱(chēng) string s = fileLen; string strName = "F:/數(shù)據(jù)/"; strName += s; strName += string(".jpg") ; // 新建一個(gè)文件 FILE* file= fopen(strName.c_str(),"wb+"); fwrite(buff,iLen,1,file); fclose(file); } fclose(f3); }
總結(jié)
以上就是本文關(guān)于c++實(shí)現(xiàn)合并文件以及拆分實(shí)例代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
上一篇:C++實(shí)現(xiàn)的求解多元一次方程示例
欄 目:C語(yǔ)言
下一篇:淺談使用C++多級(jí)指針存儲(chǔ)海量qq號(hào)和密碼
本文標(biāo)題:c++實(shí)現(xiàn)合并文件以及拆分實(shí)例代碼
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/936.html
您可能感興趣的文章
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10使用OpenGL實(shí)現(xiàn)3D立體顯示的程序代碼
- 01-10深入理解C++中常見(jiàn)的關(guān)鍵字含義
- 01-10求斐波那契(Fibonacci)數(shù)列通項(xiàng)的七種實(shí)現(xiàn)方法
- 01-10C語(yǔ)言 解決不用+、-、&#215;、&#247;數(shù)字運(yùn)算符做加法
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類(lèi)算法
- 01-10深入全排列算法及其實(shí)現(xiàn)方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?