2012-04-09 55 views
1

我想有一个图形用户界面,为用户提供了两种选择:麻烦资源文本文件的内容到StreamReader的

  1. 在读通过打开文件对话框,用户加载的密钥文件。
  2. 读取预加载的密钥文件(用户将使用radioButton选择一个)。

这会有所帮助,因为用户不需要随身携带所有的密钥文件,但是如果需要添加新的密钥文件,仍然可以提供灵活性。

我的代码目前正在为选项#1工作。我使用:

readFile = new StreamReader(KeyFileFullPath); 

其中KeyFileFullPath是由openFileDialog定义的密钥文件的文件路径。

我想为选项#2使用相同的streamReader,但是我在读取资源文件时遇到了问题。

this question,我尝试以下操作:

_assembly = Assembly.GetExecutingAssembly(); 
readFile = new StreamReader(_assembly.GetManifestResourceStream(TM_Decoder.Properties.Resources._7p1_HOB_Key)); 

我导航到......“_ 7p1_HOB_Key”用C#的自动完成,所以我希望它在实际存在的东西指着我。然而,当我尝试运行代码,我得到这个错误:

“值不能为null.Parameter名:流”基于this

,我试图寻找了ManifestResourceNames,但所有它必须是: “TM_Decoder.Form1.resources”和“TM_Decoder.Properties.Resources.resources”

这些实际上都没有指向我已加载到项目资源中的密钥文件。

在此先感谢您获取streamReader指向资源文本文件的任何帮助!

编辑(响应SLaks建议):

  1. 除非我弄错了的意思是“根命名空间,”我认为这是正确的。该项目的名称是“TM解码器”,所以我认为“TM_Decoder”是根名称空间。这是不对的?
  2. 谢谢,我将构建操作更改为“嵌入式资源”。它以前被设置为“无”(我不知道它)。不幸的是,这还不足以解决问题(不会改变调试尝试的结果)。
  3. 我不确定资源文件夹中的项目。它们位于项目文件夹中名为“resources”的文件夹中,即 TM解码器 - >资源,而不是TM解码器 - >属性 - >资源 这是Visual Studio在通过项目属性中的资源选项卡。

回答

2

TM_Decoder.Properties.Resources._7p1_HOB_Key是一个包含实际内容而不是资源名称的字符串。
"TM_Decoder.Resources._7p1_HOB_Key"是资源名称。

+0

当我添加引号以使行读取:..._ assembly.GetManifestResourceStream(“TM_Decoder.Properties.Resources._7p1_HOB_Key”)时,它仍会在readFile中给出空值并返回与以前相同的错误。 – Patrigon 2012-04-09 19:07:29

+0

@Patrigon:您可能需要添加根名称空间。 – SLaks 2012-04-09 19:35:15

+0

此外,请确保文件的构建操作已设置为“嵌入式资源”。 – SLaks 2012-04-09 19:36:03