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