国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c++實現合并文件以及拆分實例代碼

2020-01-26 13:47:14
字體:
來源:轉載
供稿:網友

本文主要研究的是c++實現合并文件以及拆分的相關內容,分享了實現代碼,具體如下。

昨天看到一篇介紹TFS的文章,大意是為了處理海量圖片,采用分布式架構,將小圖片合并為大的文件

興趣驅使下,寫了一個簡單的文件合并拆分程序

合并的方法很簡單,將小文件寫入到大文件中,使用二進制的方式。在大文件頭,用一個int記錄合并進來的小文件的數量,接下來,一塊一塊的寫入小文件。

每一塊都分為三個部分,第一部分是文件的名稱,用20個char 來記錄;第二部分用一個int來記錄小文件的長度;第三部分則是小文件的實際內容

這樣,在拆分時,通過文件頭部獲得小文件的數量,然后逐個獲取名稱,文件長度以及內容

附上源代碼

合并:

void Merge() {   char name[20];   string str1 = "F:/數據/1.jpg";   string str2 = "F:/數據/2.jpg";   string strBlock = "F:/數據/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);     // 獲取文件內容   fread(buf1,iLen1,1,f1);    fread(buf2,iLen2,1,f2);     fclose(f1);    fclose(f2);        // 在文件頭記錄合并文件的個數   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);               //刪除申請的內存      delete[] buf1;     delete[] buf2;  } 

拆分:

void Split() {   char name[20];   string strBlock = "F:/數據/BLOCK.dat";   FILE* f3 = fopen(strBlock.c_str(),"rb+");    // 獲取文件數量   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];     // 讀取文件內容     fread(buff,iLen,1,f3);     char fileLen[10];     sprintf(fileLen, "%d", iLen);      // 以文件長度做名稱     string s = fileLen;     string strName = "F:/數據/";     strName += s;     strName += string(".jpg") ;      // 新建一個文件     FILE* file= fopen(strName.c_str(),"wb+");     fwrite(buff,iLen,1,file);     fclose(file);   }    fclose(f3); } 

總結

以上就是本文關于c++實現合并文件以及拆分實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清徐县| 太谷县| 岑溪市| 喀什市| 岳阳县| 双牌县| 邮箱| 招远市| 扎囊县| 出国| 金乡县| 乌兰察布市| 武平县| 株洲县| 蚌埠市| 北宁市| 伊通| 宜州市| 南康市| 迭部县| 佳木斯市| 天祝| 德惠市| 锡林浩特市| 唐海县| 岱山县| 乡宁县| 昌图县| 巴彦县| 临邑县| 会泽县| 方山县| 昌黎县| 瑞丽市| 静宁县| 衡东县| 邹平县| 泗水县| 化隆| 新和县| 固始县|