2013-07-25 32 views
1

是否有任何「好」的方式來區分電影文件和圖像文件? 我想知道我的「std :: wstring filePath」是什麼 - 電影或圖像。 因此,我可以進一步強有力地保證我正在使用已知的文件類型。如何區分電影和圖像

換句話說,我有兩個類MYIMAGEMYMOVIE都需要路徑,它們的構造函數到文件。我想在創建其中一個類之前驗證文件路徑。

bool isMovie(const std::wstring & filePath); 
bool isImage(const std::wstring & filePath); 

當然我想過文件擴展名,但我不確定它是否好,不容易出錯解決方案。那麼使用文件擴展名或者其他可行的解決方案是可行的。

在此先感謝

+0

這不看Qt相關。爲什麼要使用「qt」標籤? –

+0

假設文件名稱正確,並且在列出所有可能的擴展名時詳盡無遺,這可能就足夠了。如果你不能假設那麼多,那麼可能有某種方式,但我無法幫到你。 – astrognocci

+0

Nikos,我已經放了一個「qt」標籤,因爲我在這個項目中使用了Qt,所以也許有人可以建議Qt特定的代碼。 – Dalamber

回答

3

您可以使用libmagic來檢測它是什麼類型的文件。您將文件路徑傳入,它會爲您提供文件的文本描述或MIME類型。

1

通常文件有特殊的所謂的魔術字節。我可以控制規範,我會使用它。如果您嘗試打開zip,gif或其他二進制文件,您通常可以在那裏找到一些與衆不同的字符串。

有一個名爲file的unix工具實用程序提供了這樣的功能,所以可能存在某種標準。

SQLite 3提供了一個nice example。看看1.2.11.2.5。因此,不僅提供了它是SQLite 3 DB的信息,還提供了附加的應用程序ID,因此其他工具可以識別它是哪個應用程序的數據庫。

我個人使用一些文件的第一個字節來爲我的文件編碼類型和版本信息,當我玩二進制的東西。