c++實現(xiàn)合并文件以及拆分實例代碼
本文主要研究的是c++實現(xiàn)合并文件以及拆分的相關(guān)內(nèi)容,分享了實現(xiàn)代碼,具體如下。
昨天看到一篇介紹TFS的文章,大意是為了處理海量圖片,采用分布式架構(gòu),將小圖片合并為大的文件
興趣驅(qū)使下,寫了一個簡單的文件合并拆分程序
合并的方法很簡單,將小文件寫入到大文件中,使用二進制的方式。在大文件頭,用一個int記錄合并進來的小文件的數(shù)量,接下來,一塊一塊的寫入小文件。
每一塊都分為三個部分,第一部分是文件的名稱,用20個char 來記錄;第二部分用一個int來記錄小文件的長度;第三部分則是小文件的實際內(nèi)容
這樣,在拆分時,通過文件頭部獲得小文件的數(shù)量,然后逐個獲取名稱,文件長度以及內(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+");
// 獲取文件的長度
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);
// 在文件頭記錄合并文件的個數(shù)
int iCount = 2;
fseek(f3,0,SEEK_SET);
fwrite(&iCount,sizeof(int),1,f3);
// 寫入第一個文件
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);
// 寫入第二個文件
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);
//刪除申請的內(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);
// 輸出名稱
cout<<name<<endl;
int iLen = 0;
// 讀取文件長度
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);
// 以文件長度做名稱
string s = fileLen;
string strName = "F:/數(shù)據(jù)/";
strName += s;
strName += string(".jpg") ;
// 新建一個文件
FILE* file= fopen(strName.c_str(),"wb+");
fwrite(buff,iLen,1,file);
fclose(file);
}
fclose(f3);
}
總結(jié)
以上就是本文關(guān)于c++實現(xiàn)合并文件以及拆分實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
欄 目:C語言
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/936.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-用棧實現(xiàn)表達式求值的方法詳解
- 01-10使用OpenGL實現(xiàn)3D立體顯示的程序代碼
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10求斐波那契(Fibonacci)數(shù)列通項的七種實現(xiàn)方法
- 01-10C語言 解決不用+、-、&#215;、&#247;數(shù)字運算符做加法
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實現(xiàn)DBSCAN聚類算法
- 01-10深入全排列算法及其實現(xiàn)方法


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時候用欄目交叉功能?


