c++実装マージファイルおよび分割インスタンスコード

2597 ワード

本稿では,c++実装マージファイルおよび分割に関する内容を主に検討し,実装コードを共有し,具体的には以下の通りである.
昨日、TFSを紹介する文章を見ました.大意は大量の画像を処理するために、分布式のアーキテクチャを採用して、小さな画像を大きなファイルに統合することです.
興味に駆られて、簡単なファイルを書いて分割プログラムを統合しました.
マージの方法は簡単で、小さなファイルを大きなファイルに書き込み、バイナリ方式を使用します.大きなファイルヘッダでは、統合された小さなファイルの数をintで記録し、次に、小さなファイルを1枚ずつ書き込む.
各ブロックは3つの部分に分かれており、第1の部分はファイルの名前で、20 charで記録されています.第2部はintで小さなファイルの長さを記録する.第3部は小さなファイルの実際の内容です
これにより、分割時にファイルヘッダから小ファイルの数を取得し、名前、ファイル長、コンテンツを1つずつ取得する
ソースコードを添付
結合:

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 
 

まとめ
以上、c++実装マージファイルおよび分割インスタンスコードのすべての内容について説明したが、皆さんの役に立つことを願っている.興味のある方は引き続き当駅の他の関連テーマを参照することができます.不足点があれば、伝言を歓迎します.友达の本駅に対する支持に感谢します!