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.