我有一個很好的技術來獲取當前系統中的相關擴展名/圖像(因爲擴展名可以有不同的圖像從系統到另一個)。這裏是功能:不可能關閉SHGetFileInfo
public static Icon getIconFromFile(string ext, bool large = true)
{
string fileName = (new Random()).Next(100, 1000).ToString() + ext;
System.IO.File.Create(fileName);
System.Drawing.Icon icon;
SHFILEINFO shinfo = new SHFILEINFO();
if (large)
{
IntPtr hImgLarge = Win32.SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON);
icon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
}
else
{
IntPtr hImgSmall = Win32.SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
icon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
}
try
{
System.IO.File.Delete(fileName);
}
catch(Exception e)
{
System.Console.WriteLine(e.StackTrace);
}
return icon;
}
問題是函數沒有關閉對文件的訪問,所以我不能刪除它。我能怎麼做 ?由於
你確定你不想考慮其他技術?如果您有什麼不權限創建的文件嗎?請參閱[本SO接聽](http://stackoverflow.com/a/272044/ ?870604) – ken2k 2012-02-03 22:27:00
大,但如何從ProgramIcon – Extaze 2012-02-04 11:21:00
提取的ImageSource你不泄露圖標更好地處理到:Icon.FromHandle(shinfo.hIcon).clone(); DestroyIcon(shinfo.hIcon)' - 那裏?也是原生的Icon.ExtractAssociatedIcon – 2012-02-04 11:37:45