2013-10-16 3 views
2

Qt 응용 프로그램에서 작업하기. 내가 실행하는 동안 자체의 md5 체크섬을 반환하는 exe 파일을 얻으려고 노력하고있어. 어떻게해야합니까?Qt 응용 프로그램에서 md5 체크섬을 얻는 방법

QFile theFile("file.exe"); 
QByteArray thisFile; 
if (theFile.open(QIODevice::ReadOnly)) 
{ 
    thisFile = theFile.readAll(); 
} 
else 
{ 
    qDebug() << "Can't open"; 
} 

qDebug() << QString("%1").arg(thisFile.length()); 

fileMd5 = QString(QCryptographicHash::hash((thisFile), QCryptographicHash::Md5).toHex().toUpper()); 

qDebug() << fileMd5; 

이 그러나, 올바른 값을 반환하지 않습니다

나는이 시도했다.

업데이트 :

다른 파일에서도 사용할 수 있습니다. 문제는 그것이 실행되는 동안 EXE를 읽을 수 없다는 것 같습니다.

최종 업데이트 :

QFile theFile(QCoreApplication::applicationFilePath()); 
QByteArray thisFile; 
if (theFile.open(QIODevice::ReadOnly)) 
{ 
    thisFile = theFile.readAll(); 
} 
else 
{ 
    qDebug() << "Can't open file."; 
} 

QString fileMd5 = QString(QCryptographicHash::hash((thisFile), QCryptographicHash::Md5).toHex()); 

qDebug() << fileMd5; 
+0

사본을 만들어야하지만 지금은 ... 어떻게하지 않습니까? –

+0

이것은 버전을 확인하기위한 것입니다. 버전 번호를 확인하는 대신 내 응용 프로그램에서 md5 체크섬을 가져 와서 최신 버전의 다른 md5 체크섬을 반환하는 PHP 스크립트와 비교해 보겠습니다. 일치하지 않으면 사용자에게 최신 버전을 다운로드 할 수있는 링크가 표시됩니다. –

답변

0

당신은 theFileopen를 호출하는 것을 잊었다 :

이 솔루션입니다.

if (!theFile.open(QIODevice::ReadOnly)) 
    // Handle error here 

또한 실행 파일의 경로를 얻으려면 QCoreApplication::applicationFilePath()을 사용해야합니다.

+0

나는 그걸 알아 냈다. 이제 문제는 사용중인 파일을 열 수없는 것입니다. –

+0

QCoreApplication :: applicationFilePath() <== 이것이 내가 필요한 것입니다. 감사! –

0

MD5sum을 확인하고 PHP 스크립트와 비교하여 필요에 따라 업데이트를 요청하거나 응용 프로그램을 직접로드하는 독립 응용 프로그램을 만들어야합니다 (myApp).

다음과 같이 : myApp => 업데이트가 필요합니까? (업데이트) : (TheRealApp)

0

좋아, 파일을 찾지 못했던 것 같습니다. 저는 친척 대신에 절대적인 경로를 시도했고 효과가있었습니다. 무엇이 잘못되었는지 알아 내야 할 것입니다.하지만 실행 중일 때 스스로를 읽을 수있는 것처럼 보입니다.

+0

이상한 ... detunized 솔루션을 확인하십시오. –

+0

빌드가 이상해졌습니다. QtCreator 대신 명령 줄을 다시 작성 했으므로 이제 상대 경로가 작동합니다. "file.exe"를 경로로 사용하여 원하는 방식으로 읽을 수 있습니다. –

+0

applicationFilePath와 친척간에 차이가 있기 때문입니다. –

관련 문제