2013-08-07 66 views
9

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

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

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

+2

请提供更多的信息。你在用什么IDE?这是什么类型的项目?你是如何在资源文件夹中包含文本文件的?你在文本文件上设置了哪些构建选项? –

+0

我正在使用c#。其中有很多文本文件和我读这些文件的方式的项目是我打开一个文件,只读取我想要的那个文件的药水。这意味着我有时会跳过该文件中的行,具体取决于我想要的内容。我已将这些文件(69个文本文件)包含在资源目录中。所以在部署之后,我想要在另一台计算机上安装安装程序时,我的程序能够读取这些文件!我真的很挣扎!我想要一个完整的代码。 –

+0

你正在用C#编写,但告诉我们你正在使用哪个IDE,(如果不是monoDevelop,视觉工作室将是我的第一个赌注)将帮助我们告诉你如何配置构建动作。 –

回答

2

假设你的意思是你在你的项目中的文件,你已经设置为EmbeddedResource,你想

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

其中path应该是集名称后面的相对路径的文件项目文件夹层次。使用的分隔符是句号.

所以,如果你有一个名为MyCompany.MyProject和装配则该项目中,你有一个文件夹包含TestImage.jpg,你可以使用路径MyCompany.MyProject.Test.Image.jpg以获取它Stream

+0

非常感谢。它帮助了我。 – Vikram

22

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

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

+0

和什么AssemblyName在这种情况下?在“AssemblyName.MyFile.txt”里面。 –

+1

将文本文件的构建操作设置为“嵌入式资源”是关键。谢谢。 –

+0

所以@MoloraneMothusi,这是公认的答案吗?如果是这样,请将其标记为。 :) –

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

    } 
} 
+0

这不仅仅是7分钟前已写的内容的副本? –

+0

甚至没有看到你的帖子timothy(我猜你说这是因为你的帖子),我正在创建一个OP的方法检索资源中的任何文本文件,因为这不是你的副本,我很抱歉,如果我冒犯了你或其他任何人都不希望这样做,这不是一个副本。 – terrybozzio

+1

不用担心。只要不是故意的,没有错。 –