如何将图像从资源复制到磁盘

时间:2014-07-26 11:02:09

标签: c# wpf winforms

我在我的解决方案中添加了图片。将编译操作属性更改为资源并且不复制。第一次运行检查中的应用程序是目录,如果不是它们,则存在文件。我的应用程序需要对象的默认图像。这就是为什么我将图像添加到解决方案中。现在我如何将它复制到特定的磁盘位置 我是从我创立的样本中写的。

if (!File.Exists(path_exe + "\\images\\drinks\\defaultIMG.jpg"))
{
    using (var resource =  Assembly.GetExecutingAssembly().GetManifestResourceStream("Data\\defaultIMG.jpg"))
    {
         using (var file = new FileStream(path_exe + "\\images\\drinks\\defaultIMG.jpg", FileMode.Create, FileAccess.Write))
         {
               resource.CopyTo(file);
         }
}

}

但是这只会创建一个空文件。

3 个答案:

答案 0 :(得分:4)

我认为最简单的方法是:

 Properties.Resources.defaultIMG.Save(path_exe + "\\images\\drinks\\defaultIMG.jpg");

其中defaultIMG是您的图片资源名称。

答案 1 :(得分:1)

我在http://www.c-sharpcorner.com/uploadfile/40e97e/saving-an-embedded-file-in-C-Sharp/上找到了代码示例。它运作良好

Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Zeszycik.Data.defaultIMG.jpg");
FileStream fileStream = new FileStream("new.jpg", FileMode.CreateNew);
for (int i = 0; i < stream.Length; i++)
     fileStream.WriteByte((byte)stream.ReadByte());
fileStream.Close();

答案 2 :(得分:0)

你的GetManifestResourceStream()是否返回null? GetManifestResourceStream始终以下列格式接受资源名称:

<namespace>.<path in project>.<filename>

在您的情况下,如果命名空间是Company.Application并且资源文件路径是“Resources / defaultIMG.jpg”,则应该将GetManifestResourceStream称为

Assembly.GetExecutingAssembly().GetManifestResourceStream("Company.Application.Resources.defaultIMG.jpg")

如果您不确定程序集中的实际资源名称,请使用以下代码查看程序集中嵌入的资源列表:

foreach( string resourceName in Assembly.GetExecutingAssembly().GetManifestResourceNames() ) {
  MessageBox.Show(resourceName);
}

所以,你的代码应该是

if (!File.Exists(path_exe + "\\images\\drinks\\defaultIMG.jpg"))
{
    using (var resource =  Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace.Resources.defaultIMG.jpg"))
    {
         using (var file = new FileStream(path_exe + "\\images\\drinks\\defaultIMG.jpg", FileMode.Create, FileAccess.Write))
         {
               resource.CopyTo(file);
         }
}

我假设您已将图像资源的“Bulid Action”设置为“Embedded resource”。

有关详细信息,请参阅Microsoft .NET Framework Resource Basics