关于c#:在RESX文件中存储数据集

Storing Datasets in a RESX file

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

我需要将一个操作数据表存储在一个资源文件(*.RESX中)中,但无法确定如何进行操作。

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

1
2
3
4
5
6
7
8
9
10
struct {
   int inputA;
   int outputB;
} dataPoint;

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

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

1
2
3
4
5
6
7
Name:       Value:
-----       ------
PerfData1   { 0,  2000}
PerfData2   {10,  4000}
PerfData3   {20,  6300}
PerfData4   {30,  8400}
PerfData5   {40, 10620}

但是这种格式需要大量的解析、相关的验证和错误处理,而这些看起来是不必要的。

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


不必使用resx将一些静态数据嵌入程序集中。

使用Visual Studio,您只需添加文件(添加新项或添加现有项),将生成操作(F4或属性窗口)更改为"Embedded Resource",然后可以使用类似这样的代码加载它(注意:应在同一程序集中以避免安全问题):

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

我想这里的文件是myfile.myext,这个文件直接添加到项目根目录中,因为vs会自动将当前的项目名称空间(这里是consoleapplication1)添加到嵌入的资源路径中。

如果您对此路径不确定,我建议您使用.NET Reflector之类的工具,它能够显示嵌入的资源名称和程序集中的数据。

这将为您提供流实例。因此,您可以存储任何类型的数据,前提是您可以从流实例(memorystream、streamreader、dataset、net或xml序列化对象、位图等)加载/保存数据。


你最好使用app.config文件。您可以使用appsettings部分添加字符串,这显然需要进行解析(类似于您试图对.resx执行的操作)。然而,app.config文件将允许您创建定制的XML节,这些节可能更适合您的需求。关于使用配置文件,最好的部分是能够更改配置数据,而无需实际重建应用程序。

http://www.csharpfriends.com/articles/getarticle.aspx?ToeLoID=45

http://www.codeproject.com/kb/aspnet/configSections.aspx

另外,请看一下下面的线程,但是您将拥有数据点而不是页面:

自定义app.config配置节处理程序