全部。我正在嘗試編寫一個C++程序,它將遍歷用戶指定的目錄(例如/ home/alpernick/Pictures)。首先,這是爲了確保沒有重複(通過md5sum進行檢查)。確保文件擴展名匹配C++中的文件類型
但我真正想要包括的一個功能是確保文件名的擴展名與文件的類型匹配。
例如,如果文件的名稱是「sunrise.png」,我想確保它確實是一個PNG,而不是錯誤標記的JPEG(例如)。
我用四個函數來解決這個問題,如下所示。
字符串的擴展名(字符串文件名)//返回文件名的擴展名(包括名爲.tar.gz處理,所以它不是一味地只是返回最後3個字符)
串的fileType(串fileName)//這個是鍵 - 它返回實際的文件類型,所以如果名爲fileName的文件是PNG,fileType()將返回PNG,而不管返回值是否爲擴展名()
string基本名稱(字符串文件名)//重新生成文件的基本名稱,即(所以,對於sunset.jpg,它會返回日落;對於蓬鬆球,tar.gz,它會返回蓬鬆球)
string renameFile(string incorrectFileName,string fileNameBeforeExtension,string actualFileType)//返回字符串,其值是與正確的文件擴展名連接的基本名稱。
string file = sunset.jpg;
/* Setting file to be hard-coded for illustrative purposes only */
if(extension(file) != fileType(file)
{
char fixedName [] = renameFile(file, basename(file), fileType(file));
puts(fixedName);
}
我與字符串處理爲零的問題。然而,我卡在fileType()上。我希望這個程序不僅能在我的主機(Kubuntu 14.04)上運行,而且還能夠在Windows機器上運行。所以,看起來我需要一些庫或一組庫,這對兩者都是通用的(或者至少爲兩者編譯)。
任何幫助/建議?
您需要知道要檢查的內容的文件格式,並知道該內容的某些類型指示符(例如某些文件類型的幻數)。我懷疑,有這樣的可用於任意類型的文件。 –