2010-06-07 47 views
2

它实际上是有用的,我的一些文件存储在EXE复制到选定的位置。 我正在生成HTML和JS文件,需要复制一些CSS,JS和GIF。存储文件

片段

System.IO.File.WriteAllBytes(@ “C:\ MyFile.bin”,ProjectNamespace.Properties.Resources.MyFile);

不适合我!

在“WriteAllBytes”它说: “无法从‘System.Drawing.Bitmap’转换为‘字节[]’” 用于图像和 “不能从‘字符串’转换为‘字节[]’” 为文本文件。

帮助!

更新:下面解决。

+1

如果您已解决该问题,请单击最有帮助的答案旁边的绿色复选标记。 – 2010-06-10 00:59:13

回答

0

将文件添加到项目资源并将其“生成操作”设置为“嵌入式资源”。

现在提取使用这个片段的任何文件(文本或二进制):

WriteResourceToFile("Project_Namespace.Resources.filename_as_in_resources.extension", "extractedfile.txt"); 


public static void WriteResourceToFile(string resourceName, string fileName) 
{ 
    int bufferSize = 4096; // set 4KB buffer 
    byte[] buffer = new byte[bufferSize]; 
    using (Stream input = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
    using (Stream output = new FileStream(fileName, FileMode.Create)) 
    { 
     int byteCount = input.Read(buffer, 0, bufferSize); 
     while (byteCount > 0) 
     { 
      output.Write(buffer, 0, byteCount); 
      byteCount = input.Read(buffer, 0, bufferSize); 
     } 
    } 
} 

不知道根据这篇文章是有多深是正确的:http://www.yoda.arachsys.com/csharp/readbinary.html 但它的作品。

6

你想要的文件添加到您的解决方案,然后他们Build Action属性设置为Embedded Resource。这会将该文件嵌入到您的exe文件中。 (msdn

然后你只需要编写的代码被执行exe文件时,文件写入到磁盘中。

喜欢的东西:

File.Copy("resource.bmp", @"C:\MyFile.bin"); 

替换resource.bmp您的文件名。

附录:

如果你把该文件在您的解决方案,你需要做的路径的子文件夹部分resource.bmp的子文件夹。例如:

File.Copy(@"NewFolder1\resource.bmp", @"C:\MyFile.bin"); 

此外,您可能需要将Copy To Output Directory属性设置为Copy AlwaysCopy If Newer

+0

你说得对,它必须是“Embedded Resource”,但是File.Copy()在这里不起作用。 我找到了解决方案。 – user360393 2010-06-08 12:07:37

+0

它适用于我......您是否将“resource.bmp”更改为正确的文件名? – 2010-06-08 12:32:29

+0

舒尔。但事实并非如此。 似乎File.Copy()仅适用于文本文件。 我在这里离开了我的解决方案。 – user360393 2010-06-08 17:31:50

1

我假设你通过Project Properties窗口中添加的文件。这不允许您添加任意文件,但它确实支持TextFiles,Bitmap等。

对于一个嵌入式文本文件,使用

File.WriteAllText(@"C:\MyFile.bin", Properties.Resources.TextFile1); 

对于图像,请使用

Properties.Resources.Image1.Save(@"C:\MyFile.bin"); 
0

可以在.resx文件嵌入二进制文件。把它们放在文件部分(它看起来像你使用的图片部分代替)。如果.resx文件生成.Designer.cs文件,它应该可以作为字节数组访问。

File.WriteAllBytes(@"C:\foobar.exe", Properties.Resources.foobar);