File Stream C++ Tutorial

#include 
#include 
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  \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;
}