2014-10-05 150 views
-5

我有許多文件夾與自定義圖標(除默認Windows文件夾圖標以外的任何圖標) 我想查找與文件夾目錄關聯的圖標路徑。獲取文件夾圖標路徑

例如,我有一個名爲「文檔」的文件夾,它在不同的目錄路徑中具有自定義圖標。假定我只有文件夾目錄路徑,並且我想找到圖標的路徑。

d:\...\customicon.ico (icon's path) 
d:\...\Documents (folder's path) 

下面是我想要的簽名。

string getIconPath(string folderPath) { 
    //return associated icon's path 
} 
+3

你要我們找到你的PC上的路徑...? – MarioDS 2014-10-05 18:47:57

+0

不,我需要知道如何在C#中找到文件夾圖標路徑,就像我有文件夾路徑:C:\ ... \ a有一個自定義的圖標,我從D:\ .... \ sdfa之前設置。 ico,我需要一個像字符串geticonpath(@「c:\ ... \ a」)的函數,它給了我「D:\ ... \ sdfa.ico」 – user4111079 2014-10-05 19:33:01

+0

您不能在您存儲位置正在設置圖像並在以後使用這些信息? – pasty 2014-10-05 21:03:06

回答

1

這裏是我想要的功能:

string getIconPath(string folderPath) { 
    SHFILEINFO shinfo = new SHFILEINFO(); 
    Win32.SHGetFileInfo(folderPath, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), (int)0x1000); 
    return shinfo.szDisplayName 
} 

這裏是SHFILEINFO結構和Win32類實現:

[StructLayout(LayoutKind.Sequential)] 
public struct SHFILEINFO 
{ 
    public IntPtr hIcon; 
    public int iIcon; 
    public uint dwAttributes; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] 
    public string szDisplayName; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] 
    public string szTypeName; 
}; 

class Win32 
{ 
    [DllImport("shell32.dll")] 
    public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags); 
} 
0

我不確定,一旦將圖標設置爲目錄,原始圖像路徑信息就會保存在某處和/或某處。 如果你想從目錄中提取圖標,看看這個SO post和這個CodeProject article

MSDN article顯示如何從目錄中提取圖標。一種可能的解決方案是從目錄中提取相關的圖標並將其保存在所需名稱下的目錄中。這樣你至少會把圖標作爲所需目錄中的文件(如果有幫助的話)。

+0

不,我需要知道如何在C#中找到文件夾圖標路徑,就像我有文件夾路徑:C:\ ... \ a有一個自定義的圖標,我之前從D:\ .... \ sdfa中設置。 ico,我需要一個函數,如字符串geticonpath(@「c:\ ... \ a」),它給了我「D:\ ... \ sdfa.ico」 – user4111079 2014-10-05 19:47:58

+0

我已經更新了我的答案。 – pasty 2014-10-05 21:01:23