2012-11-08 44 views
0

如何確定給定路徑的文件夾是否具有通用文件夾圖標,或者是由用戶設置的自定義文件夾?我只想使用Win32 API調用。如何確定文件夾是否有自定義圖標?

我知道,我可以檢查,如果裏面有一個desktop.ini文件,但這個方法並不總是可用的(程序可能沒有權限列出文件夾的內容),並且速度很慢,因爲需要分別解析ini文件時間(圖標可能不會更改)。

+0

這是什麼意思?喜歡SHGetFileInfo() –

+0

我希望顯示整個文件系統樹,所以我必須將圖標存儲在某種圖像列表中。通常約98%的文件夾具有標準的通用文件夾圖標,只有2%具有自定義圖標。我必須毫無意義地將數百或數千個相同的圖標存儲在該列表中。 – Spook

+0

操作系統爲自己的用戶界面管理系統級圖像列表。您可以使用SHGetFileInfo()來訪問該圖像列表並獲取該圖像列表中的文件系統項目的索引。只需包含「SHGFI_SYSICONINDEX」標誌即可。 –

回答

0

您不需要「列出文件夾內容」。該文件始終被命名爲desktop.ini。如果您有文件夾路徑,只需將該文件名添加到該文件夾​​並嘗試打開該文件。如果失敗,GetLastError()會告訴你爲什麼,或者是因爲該文件不存在或者你沒有訪問權限。

+0

好的,但我**不要**想通過解析desktop.ini來做到這一點,正如我明確指出的那樣!例如,即使我沒有權限列出文件夾內容(=訪問文件夾中的文件),SHGetFileInfo也會返回有效圖標。我正在尋求清晰的WinAPI方式來解決這個問題。 – Spook

+0

你只是回答了你自己的問題 - 如果它有效,使用'SHGetFileInfo()'。所以有什麼問題? –

+0

我通過P/Invoke在C#中完成它。我不想用「借來的」句柄保留圖標,所以我在通過SHGetFileInfo()後立即克隆它們,然後釋放它們。這樣,每次我請求它們時,即使相同的圖標也重複在我的列表中,這正是我想要阻止的。 – Spook

相關問題