Storing Datasets in a RESX file
我对C/.NET文件中的资源非常陌生。
我需要将一个操作数据表存储在一个资源文件(
如果我用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配置节处理程序