2013-03-25 90 views
0

是否有可靠的方法來識別Windows平臺上文件的文件類型?Shell32 GetDetailsOf本地化問題

我繼承了一個使用Shell32 GetDetailsOf函數查詢文件類型的程序,該函數返回本地化字符串,並在使用非英文系統時導致錯誤(例如,在德語系統GetDetailsOf(item,9) 「Bild」而不是「Image」)。

+0

您可以定義「文件類型」嗎? – 2013-03-25 18:32:54

+0

文件類型與「圖像」,「視頻」,「文本」,「可執行文件」等一樣。 – zeroc8 2013-03-25 21:09:18

+0

這根本不是一個定義。如果我爲每個文件返回「圖像」是否沒問題?不,我不這麼認爲。你希望程序如何決定文件類型是什麼。 – 2013-03-25 21:11:07

回答

2

使用文件類型的文本描述不是識別特定類型文件的可靠方法。正如您已經注意到的,描述字符串從語言到語言的變化,但是它們也可以根據用戶安裝的軟件在一種語言中進行更改(作爲一個例子,.jpg文件可能具有「JPEG圖像」如果用戶安裝了聲明文件類型並更改說明的軟件,則在另一個系統上顯示「Adobe Photoshop Image」。

相反,識別文件類型的最佳方法是查看文件的擴展名(本例中爲.jpg)。你對它的處理取決於你的應用程序。你可能只是和你一起工作的擴展名的硬編碼的列表,或者更一般的,你可以在註冊表中查找的文件類型的「感知類型」:

HKEY_CLASSES_ROOT \ JPG格式\ PerceivedType

查看該值是否設置爲「圖像」,「音頻」等。

+0

嗯,這就是我需要澄清。我檢查了MSDN上的描述http://msdn.microsoft.com/en-us/library/windows/desktop/bb787870(v=vs.85).aspx,但它甚至沒有提到正在存在的iColumn參數在這裏使用。例如,我注意到,2給了我「Paint.NET圖像」(正如你所提到的),但是通過9返回「Image」和11「Picture」。 – zeroc8 2013-03-25 21:14:50

+0

這似乎是一個相當理智的方法。 – 2013-03-25 21:20:45

+0

我想看看文件擴展名是要走的路。多謝你們。 – zeroc8 2013-03-25 21:32:21