Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将图标文件保存到硬盘驱动器_C#_Icons_Save_Filestream_Extract - Fatal编程技术网

C# 将图标文件保存到硬盘驱动器

C# 将图标文件保存到硬盘驱动器,c#,icons,save,filestream,extract,C#,Icons,Save,Filestream,Extract,我知道这一定是非常简单的——我花了这么长时间,基于VB6的简单程度,寻找这个问题的答案,真是难以置信。我只想使用Icon.ExtractAssociatedIcon从EXE文件中提取图标,然后将此图标文件保存到我的硬盘 所以,这就是我所拥有的,我也会向你们展示我所尝试过的,这样你们就不会认为我懒惰了 OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); string s = Environment.GetFolderPath(

我知道这一定是非常简单的——我花了这么长时间,基于VB6的简单程度,寻找这个问题的答案,真是难以置信。我只想使用Icon.ExtractAssociatedIcon从EXE文件中提取图标,然后将此图标文件保存到我的硬盘

所以,这就是我所拥有的,我也会向你们展示我所尝试过的,这样你们就不会认为我懒惰了

OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();

string s = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\IconData.ico";

Icon ico = Icon.ExtractAssociatedIcon(ofd.FileName);
Bitmap bmp = ico.ToBitmap();

bmp.Save(s, System.Drawing.Imaging.ImageFormat.Icon);
上面的代码只是在我的桌面上创建了一个名为“iconda.ico”的文件,长度为0字节。再说一次,我确信这一定是非常容易做到的,但就我的一生而言,我无法理解这一点


谢谢大家!

如果保存图标而不首先转换为位图,将获得更好的结果。这是因为“图标”可以包含多个大小,而位图是在转换过程中选择的单个大小

Icon类没有save to file方法,但它有save to FileStream方法,因此您可以这样保存它:

        string s = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\IconData.ico";
        using (FileStream fs = new FileStream(s, FileMode.Create))
            ico.Save(fs);

您应该共享您试图打开的可执行文件或图标,因为在这里它可以正常工作。我将原始图标文件的名称从9665.ico更改为FileIcon.ico。新文件“iconda.ico”在我的桌面上有一个空白的白色图标,但当我用paint打开它时,我可以看到图像。这正常吗?所以线程有一个指向CodeProject库的链接,看起来很有希望。也许你想看看。“所以我们不认为你懒惰?”一个懒惰的程序员实际上是件好事。这是一个很大的动机,以更简单的方式来做的事情,这是我们所有的贸易都是关于。一定是你的设置有问题。你的代码运行正常。这也是我的第一反应,但当我尝试时,保存的图标并没有显示“正确”。我使用excel.exe作为目标程序集。谢谢,这是我一直在使用的程序集。我忘了更新这篇文章,因为我第一次找到解决方案还不到8个小时,所以我没有大声说出我的答案。但是,我会将其标记为正确的。以lync.exe(skype)为例,我得到了非常块状和像素化的结果。这是意料之中的事,还是我出了什么差错?