Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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#EXE文件中_C#_File_Executable - Fatal编程技术网

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

将文件存储在C#EXE文件中,c#,file,executable,C#,File,Executable,实际上,将一些文件存储在EXE中以复制到选定位置对我很有用。 我正在生成HTML和JS文件,需要复制一些CSS、JS和GIF 片段 System.IO.File.writealBytes(@“C:\MyFile.bin”,ProjectNamespace.Properties.Resources.MyFile) 不适合我 在“WriteAllBytes”上,它说: “无法从'System.Drawing.Bitmap'转换为'byte[]”” 图像和 “无法从“字符串”转换为“字节[]” 用于文

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

片段

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

不适合我

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

救命啊


更新:已在下面解决。

将您想要的文件添加到解决方案中,然后将其
生成操作
属性设置为
嵌入资源
。这将把文件嵌入到您的exe中。()

然后,在执行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 Always
Copy If Newer

我假定您是通过“项目属性”窗口添加文件的。这不允许您添加任意文件,但它支持文本文件、位图等

对于嵌入式文本文件,请使用

  File.WriteAllText(@"C:\MyFile.bin", Properties.Resources.TextFile1);
对于图像,使用

  Properties.Resources.Image1.Save(@"C:\MyFile.bin");
可以在.resx文件中嵌入二进制文件。将它们放在文件部分(看起来您使用了图像部分)。如果.resx文件生成了.Designer.cs文件,则该文件应该可以作为字节数组访问

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

将文件添加到项目资源中,并将其“构建操作”设置为“嵌入资源”

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

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);
        }
    }
}
不知道根据这篇文章,它的正确性有多深:
但它是有效的。

你说得对,它必须是“嵌入式资源”,但只有File.Copy()在这里不起作用。我找到了解决办法。它对我有效。。。您是否将“resource.bmp”更改为正确的文件名?舒尔。但事实并非如此。似乎File.Copy()只适用于文本文件。我把解决方案留在这里了。如果不复制文本文件会怎么样?我用bmp试过上面的方法。不知道。我在下面发布了我的通用解决方案,它适用于任何类型的文件。简单如复制粘贴+设置“构建操作”。如果您已解决问题,请单击最有用答案旁边的绿色复选标记。