将数据集存储在RESX文件中

时间:2011-03-28 18:36:35

标签: c# .net resources resx

我对C#/ .Net文件中的资源非常陌生。

我需要在资源文件(*.RESX)中存储一个操作数据表,但无法弄清楚如何操作。

如果我在C中硬编码,我会这样做:

struct {
   int inputA;
   int outputB;
} dataPoint;

dataPoint myOpsData[] = { { 0,  2000},
                          {10,  4000},
                          {20,  6300},
                          {30,  8400},
                          {40, 10620} };

Visual Studio 2010编辑器中最简单的是使用字符串,但只将字符串映射到值。如果我这样做,我的数据集看起来像:

Name:       Value:
-----       ------
PerfData1   { 0,  2000}
PerfData2   {10,  4000}
PerfData3   {20,  6300}
PerfData4   {30,  8400}
PerfData5   {40, 10620}

但是这种格式需要大量的解析和相关的验证以及错误处理,这似乎是不必要的。

如何在.RESX资源文件中表示数据点数组(甚至更复杂的数据类型)?

2 个答案:

答案 0 :(得分:3)

您不必使用ResX在程序集中嵌入一些静态数据。

使用Visual Studio,您只需添加文件(添加新项或添加现有项),将构建操作(F4或属性窗口)更改为“嵌入式资源”,然后您可以加载它像这样的代码(注意:应该在同一个程序集中以避免安全问题):

using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ConsoleApplication1.MyFile.MyExt"))
{
   // load data from stream
}

我想这里的文件是MyFile.MyExt,并且这个文件直接添加到项目根目录,因为VS会自动将当前项目命名空间(此处为ConsoleApplication1)添加到嵌入式资源路径。

如果您不确定此路径,我建议您使用.NET反射器等工具,该工具能够显示组件中的嵌入资源名称和数据。

这将为您提供Stream实例。因此,您可以存储任何类型的数据,只要您可以从/向Stream实例(MemoryStream,StreamReader,DataSet,.NET或Xml序列化对象,位图等)加载/保存它。

答案 1 :(得分:1)

最好使用app.config文件。您可以使用AppSettings部分添加字符串,显然您需要解析(类似于您尝试使用.RESX执行的操作)。但是,app.config文件允许您创建可能更符合您要求的自定义XML部分。使用配置文件的最佳部分是能够更改配置数据,而无需实际重建应用程序。

http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=45

http://www.codeproject.com/KB/aspnet/ConfigSections.aspx

另外,请查看以下主题,但不是页面,而是数据点:

Custom app.config Config Section Handler