MenüHomeBlogMagic

Simple binary compare program

Hier eine einfache Qt Applikation um zwei Dateien miteinander zu vergleichen:

Man kann durch die default Werte in sFile1/sFile2 die Dateien vorgeben, oder per Parameter übergeben.

#include <QDebug>
#include <QFile>
#include <QString>
#include <QIODevice>

int main(int argc, char *argv[])
{
  QString sFile1 = "";
  QString sFile2 = "";
  if(argc > 1)
  {
    sFile1 = argv[1];
  }
  if(argc > 2)
  {
    sFile1 = argv[2];
  }
  QFile oFile1(sFile1);
  QFile oFile2(sFile2);
  if(oFile1.open(QIODevice::ReadOnly))
  {
    if(oFile2.open(QIODevice::ReadOnly))
    {
      qint64 uiRead1 = 0;
      qint64 uiRead2 = 0;
      qint64 uiPosition = 0;
      char pCompare1[10240];
      char pCompare2[10240];
      while( ((uiRead1 = oFile1.read(pCompare1, 10240)) != 0) &&
             ((uiRead2 = oFile2.read(pCompare2, 10240)) != 0) &&
             uiRead1 <= 10240 &&
             uiRead2 <= 10240 &&
             uiRead1 == uiRead2
             )
      {
        qDebug() << "Read at " << QString::number(uiPosition, 16);
        for(int i=0; i<uiRead2; i++)
        {
          if(pCompare1[i] != pCompare2[i])
          {
            qDebug() << "Failed at " << QString::number(uiPosition + i, 16);
            return -1;
          }
        }
        uiPosition += uiRead2;
      }
      if(uiRead1 != uiRead2)
        qDebug() << "Size of Files are different";
      oFile2.close();
    }
    else
    {
      qDebug() << "Failed to open File2: " << sFile2;
    }
    oFile1.close();
  }
  else
  {
    qDebug() << "Failed to open File1: " << sFile1;
  }

  return 0;
}

Der Vorteil, man kann auf diese Weise auch größere Dateien vergleichen.
In meinem Beispiel hatte ich zwei 6GB große Dateien zu vergleichen, woran einige andere Tools gescheitert sind.

Permalink: https://adirmeier.de/Blog/ID_263
Tags: Blog, c/c++, Qtvon am 2019-06-17