2013-10-16 62 views
2

使用Qt應用程序。我試圖讓exe文件在運行時返回自己的md5校驗和。我怎樣才能做到這一點?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校驗和,並將其與PHP腳本進行比較,該腳本將返回最新版本的另一個md5校驗和。如果它們不匹配,則會向用戶顯示鏈接以下載最新版本。 –

回答

0

你忘了打電話給opentheFile

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

另外,您應該使用QCoreApplication::applicationFilePath()來獲取可執行文件的路徑。

+0

我只是想通了。現在的問題是它似乎無法打開正在使用的文件。 –

+0

QCoreApplication :: applicationFilePath()<==這就是我所需要的。謝謝! –

0

您必須創建一個獨立的應用程序(我們稱之爲myApp),它檢查MD5sum並將其與您的PHP腳本進行比較,並根據需要請求更新或直接加載應用程序。

像這樣:myApp =>需要更新嗎? (更新):(TheRealApp

0

好吧,看起來它只是沒有找到該文件。我嘗試了一個絕對路徑,而不是一個親戚,它的工作。我必須弄清楚發生了什麼問題,但看起來它可以在運行時自行讀取。

+0

這很奇怪...檢查失敗的解決方案 –

+0

構建的東西很奇怪。我重建了它的命令行而不是在QtCreator中,現在相對路徑起作用。它可以通過使用「file.exe」作爲路徑以我想要的方式自我閱讀。 –

+0

這是因爲applicationFilePath和親屬之間存在差異 –

相關問題