最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++實現(xiàn)合并文件以及拆分實例代碼

 更新時間:2018年01月22日 11:35:11   作者:kwsy2008  
這篇文章主要介紹了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)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • 淺析Boost智能指針:scoped_ptr shared_ptr weak_ptr

    淺析Boost智能指針:scoped_ptr shared_ptr weak_ptr

    雖然通過弱引用指針可以有效的解除循環(huán)引用,但這種方式必須在程序員能預(yù)見會出現(xiàn)循環(huán)引用的情況下才能使用,也可以是說這個僅僅是一種編譯期的解決方案,如果程序在運行過程中出現(xiàn)了循環(huán)引用,還是會造成內(nèi)存泄漏的
    2013-09-09
  • C++中std::transform的使用小結(jié)

    C++中std::transform的使用小結(jié)

    std::transform?是 C++ 標(biāo)準(zhǔn)庫中的一個算法,本文主要介紹了C++中std::transform的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • C++ 遞歸遍歷文件并計算MD5的實例代碼

    C++ 遞歸遍歷文件并計算MD5的實例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于C++ 遞歸遍歷文件并計算MD5的實例代碼,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • 使用Qt實現(xiàn)旋轉(zhuǎn)動畫效果

    使用Qt實現(xiàn)旋轉(zhuǎn)動畫效果

    這篇文章主要為大家詳細介紹了如何使用Qt實現(xiàn)旋轉(zhuǎn)動畫效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C++基于CMD命令行實現(xiàn)掃雷小游戲

    C++基于CMD命令行實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了C++基于CMD命令行實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • VS2019中CMake項目的簡單使用方法

    VS2019中CMake項目的簡單使用方法

    這篇文章主要介紹了VS2019中CMake項目的簡單使用方法,需要的朋友可以參考下
    2020-02-02
  • 深入理解strcpy與memcpy的區(qū)別

    深入理解strcpy與memcpy的區(qū)別

    本篇文章是對strcpy與memcpy的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 怎么鎖定鼠標(biāo)的示例代碼分享

    怎么鎖定鼠標(biāo)的示例代碼分享

    使用代碼怎么才能鎖定鼠標(biāo)?這個功能很簡單只要一個ClipCursor()就可以搞定,需要的朋友可以參考下
    2014-01-01
  • C++中實現(xiàn)多態(tài)有幾種方式小結(jié)

    C++中實現(xiàn)多態(tài)有幾種方式小結(jié)

    在C++中,多態(tài)是一種面向?qū)ο缶幊痰奶匦?允許以統(tǒng)一的方式處理不同類型的對象,并根據(jù)實際對象的類型來執(zhí)行相應(yīng)的操作,本文給大家介紹了C++中實現(xiàn)多態(tài)有幾種方式小結(jié),需要的朋友可以參考下
    2024-12-12
  • 詳解Matlab如何繪制小提琴圖

    詳解Matlab如何繪制小提琴圖

    小提琴圖 (Violin Plot)是用來展示多組數(shù)據(jù)的分布狀態(tài)以及概率密度。這種圖表結(jié)合了箱形圖和密度圖的特征,主要用來顯示數(shù)據(jù)的分布形狀。本文將介紹如何利用Matlab繪制小提琴圖,需要的可以參考一下
    2022-02-02

最新評論

永吉县| 漳州市| 济宁市| 句容市| 孝义市| 金沙县| 宜阳县| 镇原县| 门源| 莒南县| 乌兰浩特市| 贵定县| 胶南市| 静宁县| 台州市| 连州市| 新民市| 菏泽市| 汶川县| 龙山县| 阳江市| 沙田区| 邯郸市| 曲松县| 南岸区| 岱山县| 阜平县| 和硕县| 东兴市| 东明县| 青神县| 贵溪市| 磐石市| 江川县| 桃源县| 黄浦区| 洮南市| 娄底市| 桐梓县| 涟水县| 连江县|