【问题标题】:Using C#, How to access to a resource file (.resx) and read from a text file added to it?使用 C#,如何访问资源文件 (.resx) 并从添加到其中的文本文件中读取?
【发布时间】:2011-01-03 05:14:22
【问题描述】:

我在我的项目中添加了一个名为 CrpResource.resx 的资源文件。 然后,在将文本文件添加到资源文件后,我想访问它并通过代码读取它。

请给点建议。

【问题讨论】:

  • Resx 在阅读时有一些细微差别......仅使用与 resx 一起使用的设计器生成的代码有什么问题?也许有一些反思?或者,或者 - 不要使用 resx;只需将文件包含为资源。

标签: c# file embedded-resource


【解决方案1】:

@Brij 提供了答案的核心。

然而,这里的难点在于知道资源名称是什么 - 在将文件作为资源嵌入后,计算出它的完全限定名称并不总是那么容易。

找到一个简单的方法是将此行临时添加到您的代码中:

string[] names = Assembly.GetExecutingAssembly().GetManifestResourceNames();

然后运行程序,你可以在调试器中查看所有可用资源的“名称”列表。

【讨论】:

  • 正如我在 CrpResource.Designer.cs 中看到的,我添加到资源文件中的每一件事都是作为一个属性。我该如何利用这个机会?
  • 您可以通过资源的属性名称直接访问资源,但这会为您提供资源的实例而不是其原始数据(例如,像“Properties.Resources.AppIcon”这样的图标将是位图对象您尝试使用它。因此,如果您想要从中获取原始“文件”数据,则必须要求它序列化为 MemoryStream,然后从该 MemoryStream 中读取)
【解决方案2】:
 _assembly = Assembly.GetExecutingAssembly();
 _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));

请参阅以下内容:
http://support.microsoft.com/kb/319292

【讨论】:

  • 什么是 MyNameSpace?是资源文件的名字吗?
  • 它是你项目的命名空间。在 VS > Project > Properties 你会得到命名空间
  • 那么根据您上次的评论,没有必要将资源文件的名称放在命名空间名称之后?
  • 不,您需要以这种格式给出:..
  • 首先谢谢,其次,我收到此错误:'值不能为空。参数名称:流'错误行:_textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("Ikco.Crp.UI.CrpUser.txt"));
猜你喜欢
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多