Mega Code Archive

 
Categories / C++ Tutorial / File Stream
 

A simple file-comparison utility

#include <iostream> #include <fstream> using namespace std; int main(int argc, char *argv[]) {   bool equal = true;   bool ferr = false;   unsigned char buf1[1024], buf2[1024];   if(argc!=3) {     cout << "Usage: compfiles <file1> <file2>\n";     return 1;   }   ifstream f1(argv[1], ios::in | ios::binary);   if(!f1) {     cout << "Cannot open " << argv[1] << endl;     return 1;   }   ifstream f2(argv[2], ios::in | ios::binary);   if(!f2) {     cout << "Cannot open " << argv[2] << endl;     f1.close();     if(!f1.good())       cout << "Error closing " << argv[1] << endl;     return 1;   }   do {     f1.read((char *) buf1, sizeof buf1);     f2.read((char *) buf2, sizeof buf2);     if(!f1.eof() && !f1.good()) {       cout << "Error reading " << argv[1] << endl;       ferr = true;       break;    }    if(!f2.eof() && !f2.good()) {       cout << "Error reading " << argv[2] << endl;       ferr = true;       break;    }    if(f1.gcount() != f2.gcount()) {      cout << "Files are different lengths.\n";      equal = false;      break;    }    for(int i=0; i < f1.gcount(); ++i)      if(buf1[i] != buf2[i]) {        cout << "Files differ.\n";        equal = false;        break;      }  } while(!f1.eof() && !f2.eof() && equal);  if(!ferr && equal) cout << "Files are the same.\n";  f1.clear();  f2.clear();  f1.close();  f2.close();  if(!f1.good() || !f2.good()) {    cout << "Error closing files.\n";    return 1;  }  return 0; }