2014-10-05 187 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