中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-29 16:20:28 來源:腳本之家 閱讀:195 作者:kwsy2008 欄目:編程語言

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌平区| 离岛区| 宝清县| 镇江市| 磐安县| 专栏| 罗甸县| 海南省| 河西区| 株洲县| 涞水县| 浏阳市| 盐山县| 旺苍县| 建平县| 沅陵县| 佛教| 利津县| 岗巴县| 金平| 武川县| 田东县| 甘孜| 疏附县| 徐汇区| 玉山县| 东辽县| 鄄城县| 泰州市| 天津市| 彰化市| 咸阳市| 合江县| 宁陵县| 双鸭山市| 呼玛县| 湘西| 濮阳市| 油尖旺区| 普定县| 淄博市|