【问题标题】:Reading an embedded text file读取嵌入的文本文件
【发布时间】:2013-08-09 03:28:25
【问题描述】:

我创建了一个完美运行的完整项目。我的问题涉及安装项目。当我在另一台电脑上使用时,部署时即使在资源文件夹中也找不到文本文件!

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

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

【问题讨论】:

  • 请提供更多信息。你用的是什么IDE?这是什么类型的项目?你是如何在资源文件夹中包含文本文件的?您在文本文件上设置了哪些构建选项?
  • 我正在使用 c#。它是一个包含这么多文本文件的项目,我读取这些文件的方式是我打开一个文件并只读取我想要的那个文件的药水。这意味着我有时会根据我想要的内容跳过该文件中的行。我已将这些文件(69 个文本文件)包含在资源目录中。所以部署后,我希望在另一台计算机上安装设置时,我的程序能够读取这些文件!我真的很挣扎!我想要一个完整的代码。
  • 您正在使用 C# 编写代码,但告诉我们您使用的是哪个 IDE(如果不是 monoDevelop,Visual Studio 将是我的第一个赌注)将帮助我们告诉您如何配置您的构建操作。

标签: c# embedded-resource


【解决方案1】:

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

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

【讨论】:

  • 在这种情况下,AssemblyName 是什么?在“AssemblyName.MyFile.txt”中。
  • 设置文本文件的构建动作为“EmbeddedResource”是关键。谢谢。
  • 共享资源项目中的哪些文件创建了自己的 dll,并将它们作为参考导入?
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 这不只是 7 分钟前已经写好的内容的副本吗?
    • 甚至没有看到你的帖子蒂莫西(我猜你是因为你的帖子才这么说的),我正在为 OP 创建一个方法来检索资源中的任何文本文件,因为这不是你的副本,我对不起,如果我冒犯了您或其他任何人,这不是我的意愿,这不是副本。
    • 别担心。只要不是故意的,就没有错。
    • 这个也很好,请检查一下.....嗯,即使 2 var 的名称相同...... - stackoverflow.com/questions/3314140/… - 检查接受的答案,如果你探究你会看到的答案......
    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2012-10-31
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多