正在读取嵌入的文本文件

本文关键字:文本 文件 读取 | 更新日期: 2023-09-27 18:26:42

我已经创建了一个完整的项目,它可以完美地工作。我的问题涉及安装项目。当我在另一台计算机上使用它时,即使在部署过程中文本文件在资源文件夹中,也找不到!

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

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

正在读取嵌入的文本文件

F首先将文本文件的构建操作设置为"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();

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

假设您的项目中有一个文件设置为EmbeddedResource,那么您需要

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

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

因此,如果您有一个名为MyCompany.MyProject的程序集,然后在该项目中有一个包含Image.jpg的文件夹Test,则可以使用路径MyCompany.MyProject.Test.Image.jpg为其获取Stream

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

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();
        }
    }
}