1

我想要一个为用户提供两个选项的 GUI:

  1. 读入用户通过 openFileDialog 加载的密钥文件。
  2. 读入一个预加载的密钥文件(用户可以使用单选按钮选择一个)。

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

我的代码目前适用于选项#1。我用:

readFile = new StreamReader(KeyFileFullPath);

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

我想对选项 #2 使用相同的 streamReader,但我无法将阅读器指向资源文件。

这个问题,我尝试了以下内容:

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

我使用 C# 的自动完成导航到 ..."_7p1_HOB_Key",所以我希望它指向我实际存在的东西。但是,当我尝试运行代码时,出现此错误:

“值不能为空。参数名称:流”

基于,我尝试查找 ManifestResourceNames,但它只有:“TM_Decoder.Form1.resources”和“TM_Decoder.Properties.Resources.resources”

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

提前感谢您在让 streamReader 指向资源文本文件方面提供的任何帮助!

编辑(响应 SLaks 的建议):

  1. 除非我误解了“根命名空间”的含义,否则我认为它是正确的。该项目的名称是“TM Decoder”,所以我认为“TM_Decoder”是根命名空间。这不对吗?
  2. 谢谢,我将构建操作更改为“嵌入式资源”。它以前设置为“无”(我不知道)。不幸的是,这还不足以解决问题(调试尝试的结果没有改变)。
  3. 我不确定资源文件夹中的项目。它们位于项目文件夹中名为“资源”的文件夹中,即 TM 解码器 --> 资源,而不是 TM 解码器 --> 属性 --> 资源 这是 Visual Studio 在我通过资源选项卡添加资源时自动执行的操作在项目属性中。
4

1 回答 1

2

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

于 2012-04-09T16:14:33.980 回答