C++/File/Binary File

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Binary Files

  
#include <iostream>
using namespace std;  
#include <fstream>
int main () 
{
 long start,end;
 ifstream myfile ("test.txt", ios::in|ios::binary);
 start = myfile.tellg();
 myfile.seekg (0, ios::end);
 end = myfile.tellg();
 myfile.close();
 cout << "size of " << "test.txt";
 cout << " is " << (end-start) << " bytes.\n";
 return 0;
}


binary input and output with integers

  
#include <fstream>            
#include <iostream>  
using namespace std;  
const int MAX = 100;          
int buff[MAX];                
  
int main(){  
   for(int j=0; j<MAX; j++)   
      buff[j] = j;              
                              
   ofstream os("edata.dat", ios::binary);  
                              
   os.write( reinterpret_cast<char*>(buff), MAX*sizeof(int) );  
   os.close();                
  
   for(int j=0; j<MAX; j++)       
      buff[j] = 0;  
                              
   ifstream is("edata.dat", ios::binary);  
   is.read( reinterpret_cast<char*>(buff), MAX*sizeof(int) );  
   for(int j=0; j<MAX; j++){      
      if( buff[j] != j ){ 
         cerr << "Data is incorrect\n"; return 1;
      }
   }     
   cout << "Data is correct\n";  
   return 0;  
}


reading a complete binary file

  
#include <iostream>
#include <fstream>
using namespace std;
ifstream::pos_type size;
char * memblock;
int main () {
  ifstream file ("example.txt", ios::in|ios::binary|ios::ate);
  if (file.is_open()){
    size = file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);
    file.close();
    cout << "the complete file content is in memory";
    delete[] memblock;
  }else 
    cout << "Unable to open file";
  return 0;
}


seeks particular person in file

  
#include <fstream>
  #include <iostream>  
  using namespace std;  
  class person      
  {  
     protected:  
        char name[80];
        int age;      
     public:  
        void getData(){  
           cout << "\n   Enter name: "; cin >> name;  
           cout << "   Enter age: "; cin >> age;  
        }  
        void showData(void){  
           cout << "\n   Name: " << name;  
           cout << "\n   Age: " << age;  
        }  
  };  
  int main(){  
     person pers;
     ifstream infile;
     infile.open("GROUP.DAT", ios::in | ios::binary);
    
     infile.seekg(0, ios::end);     
     int endposition = infile.tellg();        
     int n = endposition / sizeof(person);    
     cout << "\nThere are " << n << " persons in file";  
    
     cout << "\nEnter person number: ";  
     cin >> n;  
     int position = (n-1) * sizeof(person);  
     infile.seekg(position);        
                                    
     infile.read( reinterpret_cast<char*>(&pers), sizeof(pers) );  
     pers.showData();               
     cout << endl;  
     return 0;  
     }


Write numbers to a binary file and read them back

  
#include <iostream>
#include <fstream>
using namespace std;
int main(void){
   float fnum[4] = {11.22, -33.44, 55.66, 77.88};
   int i;
   ofstream out("numbers.asc", ios::out | ios::binary);
   if(!out){
      cout << "Cannot open file.";
      exit (1);
   }
   out.write((char *) &fnum, sizeof(fnum));
   out.close();
   for (i=0; i<4; i++)
      fnum[i] = 0.0;
   ifstream in("numbers.asc", ios::in | ios::binary);
   if(!in) {
      cout << "Cannot open file.";
      exit (1);
   }
   in.read((char *) &fnum, sizeof(fnum));
   cout << in.gcount() << " bytes read." << endl;
   for (i=0; i<4; i++)
      cout << fnum[i] << " ";
   in.close();
}