读取嵌入的文本文件

时间:2013-08-07 16:29:10

标签: c# embedded-resource

我创建了一个完美的项目。我的问题涉及安装项目。当我在另一台计算机上使用它时,即使它们在部署期间位于资源文件夹中,也无法找到该文本文件!

如何确保我的程序在另一台计算机上安装软件后找到这些文本文件!

我一直在寻找这个解决方案但是徒劳无功。请帮我解决这个问题。如果我能得到一个完整的代码,我将非常高兴!

3 个答案:

答案 0 :(得分:22)

首先将文本文件的构建操作设置为“EmbeddedResource”。

然后阅读代码中的文件:

var assembly = Assembly.GetExecutingAssembly();
var resourceName = "AssemblyName.MyFile.txt";

using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
    using (StreamReader reader = new StreamReader(stream))
    {
        string result = reader.ReadToEnd();
    }
}

如果您无法找出嵌入资源的名称,请执行此操作以查找名称,并且您的文件应该很明显:

assembly.GetManifestResourceNames();

这假设您希望将文本文件嵌入到程序集中。如果没有,那么您可能只想更改安装项目以在安装期间包含文本文件。

答案 1 :(得分:2)

假设您的意思是项目中有一个您已设置为EmbeddedResource的文件,则需要

using (var stream = Assembly.GetExecutingAssembly()
    .GetManifestResourceStream(path))
{
    ...
}

其中path应该是程序集名称,后跟项目文件夹层次结构中文件的相对路径。使用的分隔符是句点.

因此,如果您有一个名为MyCompany.MyProject的程序集,然后在该项目中,您有一个包含Test的文件夹Image.jpg,那么您将使用路径MyCompany.MyProject.Test.Image.jpg来获取{ {1}}为此。

答案 2 :(得分:1)

创建此函数以读取您拥有的任何嵌入式资源文本文件:

public string GetFromResources(string resourceName)
{
    Assembly assem = this.GetType().Assembly;

    using (Stream stream = assem.GetManifestResourceStream(resourceName))
    {
        using (var reader = new StreamReader(stream))
        {
            return reader.ReadToEnd();
        }

    }
}