将文件嵌入可执行文件

sor*_*419 2 c# forms file embedded-resource

我正在尝试构建一个简单的程序,并且想找到一种在可执行文件中嵌入一个文件(或多个文件)的方法。

该程序非常简单。我将在 Visual Studio 中使用 C# 构建一个表单。表格上会有几个问题和一个提交按钮。

一旦用户回答了所有问题并点击提交按钮,如果所有答案都正确,我想向用户提供该文件作为奖励。(该文件可以是图像、视频或包含多个其他文件的 zip 文件)

我想给用户提供文件的方式非常灵活。它可以只是在与可执行文件相同的目录中创建此文件,或者为用户提供下载选项以将其保存在其他位置。

下面是伪代码

private void submit_Click(object sender, EventArgs e)
{
    //functions to check all answers
    if(all answers are correct)
    {
        label.Text = "Congrats! You answered all questions correctly";

        //create the file that was embeded into the same directory as the executable
        //let's call the file 'prize.img' 

        Process.Start("prize.img");
    }
    else
        label.Text = "Some answers were not correct";
}
Run Code Online (Sandbox Code Playgroud)

逻辑非常简单且直接。问题是,如何将“ prize.img”嵌入到可执行文件中?我将把这个程序(.exe)给一个朋友,这样他就没有任何来源,我也不能保证路径。

kor*_*ner 6

您想要将该文件作为资源嵌入。

右键单击项目文件,选择属性。

在打开的窗口中,转到“资源”选项卡,如果选项卡页中间只有一个蓝色链接,请单击它以创建新资源。

在代码中,您可以输入 Resources.TheNameYouGaveTheFileHere,然后就可以访问其内容。请注意,第一次在类中使用 Resources 类时,需要添加 using 指令(在输入 Resources 后按 Ctrl+. 调出菜单,让 VS 为您执行此操作)。

您还需要保存文件方面的帮助吗?

编辑:

你可以这样做:

var resource = Properties.Resources.yourResource;

FileStream fileStream = new FileStream("filename.exe", FileMode.CreateNew);
for (int i = 0; i < resource.Length; i++)
    fileStream.WriteByte((byte)resource[i]);
fileStream.Close();
Run Code Online (Sandbox Code Playgroud)

对你有帮助吗?

编辑:

正如我所看到的,您正在获得一个流,这里有一个使其工作的更新:

var resource = Properties.Resources.yourResource;

FileStream fileStream = new FileStream("filename.exe", FileMode.CreateNew);
resource.CopyTo(fileStream);
fileStream.Close();
Run Code Online (Sandbox Code Playgroud)

现在有用吗?