将文件存储在C#EXE文件中

时间:2010-06-07 12:25:13

标签: c# file executable

对我来说,在EXE中存储一些文件以复制到选定位置实际上很有用。 我正在生成HTML和JS文件,需要复制一些CSS,JS和GIF。

片段

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

对我不起作用!

在“WriteAllBytes”上,它说: “无法从'System.Drawing.Bitmap'转换为'byte []'” 对于图像和 “无法从'string'转换为'byte []'” 用于文本文件。

帮助!

更新:解决方案如下。

4 个答案:

答案 0 :(得分:7)

将您想要的文件添加到解决方案中,然后将其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

答案 1 :(得分:1)

我假设您通过“项目属性”窗口添加了文件。这不允许您添加任意文件,但它支持TextFiles,Bitmaps等。

对于嵌入的TextFile,请使用

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

对于图像,请使用

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

将文件添加到项目资源并将其“Build Action”设置为“Embedded Resource”。

现在使用以下代码段提取任何文件(文本或二进制文件):

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 但它确实有效。