在 C# 应用程序中存储数据的最佳方式是什么[关闭]

2023-11-22

我想制作 Cookbook 应用程序来存储和阅读(和更新)菜谱,或者其他任何东西来练习 OOP 编程和思维。但是,我不确定在 C# (Visual Studio Express) 中哪种存储数据的方式(在本例中为菜谱)是最好的。 我想优化程序中数据的保存和加载,但我没有经验。什么是最好的方法?是通过 XML、SQL 还是只是纯 TXT?或者其他方式?


如果您还没有这样做,那么最好先从 XML 文件输入/输出开始,然后再进行过于高级的操作。

通常,您可以使用以下方法来获取路径来读写文件:

string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

因此,如果您想将数据存储在名为“Cookbook”的文件夹和名为“recipes.xml”的文件中,您可以执行以下操作:

string dataPath = Path.Combine(appDataPath, "Cookbook");
string recipesFileFullPath = Path.Combine(dataPath, "recipes.xml");

这给了你一条像这样的路径C:\Users\John\AppData\Local\Cookbook\recipes.xml或类似的东西,您可以传递给文件输入和输出函数。

然后您就可以开始使用System.IO命名空间类如File and FileStream了解如何正确打开和读/写文件。

然后,下一个更高级别的步骤是将这些文件流传递给用于将 XML 读写到对象的东西,例如 Linq to XML(XDocumentclass)这是首选方法。或者年龄较大的XmlSerializer.

Edit:

以下是创建对象并将其保存到 XML 文件的一些示例代码:

public class RecipeBook
{
    public List<Recipe> Recipes { get; set; }

    public RecipeBook()
    {
        Recipes = new List<Recipe>();
    }
}

public class Recipe
{
    public DateTime LastModified { get; set; }
    public DateTime Created { get; set; }
    public string Instructions { get; set; }
}

public void SomeFunction()
{
    RecipeBook recipeBook = new RecipeBook();

    var myRecipe = new Recipe()
    {
        Created = DateTime.Now,
        LastModified = DateTime.Now,
        Instructions = "This is how you make a cake."
    };

    recipeBook.Recipes.Add(myRecipe);

    var doc = new XDocument();
    using (var writer = doc.CreateWriter())
    {
        var serializer = new XmlSerializer(typeof(RecipeBook));

        serializer.Serialize(writer, recipeBook);
    }

    doc.Save(recipesFileFullPath);
}

您只需将此代码分解为适合您的结构即可。例如,如果您正在制作 Windows 窗体应用程序,那么RecipeBook将是主窗体的私有成员变量。在构造函数中你可以构造recipesFileFullPath字符串并将其也存储为私有成员变量。在 Form.Loaded 事件中,您可以检查 XML 文件是否已存在,如果存在则加载它。如果没有,你会创建一个新的RecipeBook类是空的。您也可能只在用户单击保存按钮或引发 Form.Closing 事件时序列化和保存。

EDIT:

要反序列化并读取文件,您可以执行以下操作:

var serializer = new XmlSerializer(typeof(RecipeBook));
using (var fs = new FileStream(recipesFileFullPath))
{
    RecipeBook book = (RecipeBook)serializer.Deserialize(fs);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 应用程序中存储数据的最佳方式是什么[关闭] 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • Double 值相加不一致

    我在使用 eval 实现开发一些工程规则值引擎时遇到了以下问题 Dim first As Double 1 1 Dim second As Double 2 2 Dim sum As Double first second If sum 3
  • 将数组排序到字典中

    我有很多字符串的数组 我不想将它们排序到字典中 因此所有以相同字母开头的字符串都进入一个数组 然后该数组成为键的值 键是其值数组中所有单词开头的字母 Example Key A gt gt Value array apple animal
  • 将 Heroku App 连接到 Atlas MongoDB 云服务

    预测这个问题 我需要得到SSLHeroku 支持 以便在之间建立连接Heroku and Atlas MongoDB 云使用 SSL TLS SSL 连接是要求访问 Atlas MongoDB 云服务 我正在尝试将用 node js 编写的
  • 具有 LIKE 和 IN 条件的参数化查询

    Net 中的参数化查询在示例中始终如下所示 SqlCommand comm new SqlCommand SELECT FROM Products WHERE Category ID categoryid conn comm Paramet
  • Google Fit API,获取每次活动消耗的卡路里

    因此 我正在尝试创建一个连接到 Google Fit 的应用程序 并以一种非常简化的方式向用户显示他们的数据 但我无法找到用户每天每项活动消耗的卡路里 我可以获取一整天的总卡路里以及用户每天进行的每项活动 但不能获取每项活动消耗的卡路里 G
  • MediaStore.Images.Media.getContentUri(String volumeName):Uri 的作用是什么?

    除了这个之外 Content Provider Media API 的公共方法对我来说看起来非常简单 我不确定这有什么作用或如何使用它 任何有关使用的见解将不胜感激 您使用 内部 INTERNAL CONTENT URI和 外部 为EXTE
  • 如何加快 Ruby/Rake 任务的速度

    rake tasks 运行大约需要 18 秒 这只是加载所有任务所需的时间 因此我定义的任何任务都将至少花费这个时间来运行 time rake tasks rake db clean Cleaning up database rake pa
  • log(n) 的 3 个嵌套循环的 Java Big O 表示法

    对于以下嵌套循环 大 O 表示法是什么 for int i n i gt 0 i i 2 for int j n j gt 0 j j 2 for int k n k gt 0 k k 2 count 我的想法是 每个循环是O log2 n
  • Swift 中赋值左侧使用的可选链

    当赋值语句的左侧使用可选链时 这意味着什么 如果可选变量为零 应用程序会崩溃吗 e g cell is a UITableViewCell cell textLabel text Test 有点像短路 当到达第一个 false 值时停止的运
  • Safari Javascript Date() NaN 问题 (yyyy-MM-dd HH:mm:ss)

    我的代码在 Google Chrome 中可以正常工作 但在 Safari 中却不能 我发现我需要转换yyyy MM dd HH mm ss to ISO 8601 但我没有找到解决方案来做到这一点 在线测试链接 http jsfiddle
  • 组功能不支持引用

    我使用此查询时遇到一些问题 看来我无法使用别名作为分组查询的参考 SELECT v V VEHICLEID v V LICENSENO ROUND MAX IF DAY WP DATETIME 1 WP ODOMETER NULL MIN
  • 删除 Android 中操作栏和主屏幕之间的线条或分隔线

    如何删除操作栏和主屏幕之间的线条或分隔线 如何更改 Android 中分隔线的颜色 提前致谢 只需将属性 windowContentOverlay 插入到您的主题中即可 这个方法实在是太简单了
  • java.util.zip - ZipInputStream 与 ZipInputStream压缩文件

    我有一些关于java util zip图书馆 我们基本上做的是进口和出口许多小部件 以前这些组件是使用单个大文件导入和导出的 例如
  • 具有自定义错误页面的 MVC InvalidOperationException

    我使用自定义错误页面设置
  • 如何对相同的数组值进行分组

    例如我的数组 options array array brand gt Puma code gt p01 name gt Puma One array brand gt Puma code gt p02 name gt Puma Two a
  • 如何配置 git bash 命令行补全?

    例如 在一台新的 ubuntu 机器上 我刚刚运行sudo apt get git 并且输入时没有完成 例如git check tab 我没有找到任何东西http git scm com docs 但 IIRC 完成现在已包含在 git 包
  • 数据库设计-布尔属性或新表

    假设我有一个数据库表 我想根据布尔属性 例如 标记 属性 进行过滤 是只向表添加 标记 属性更好 还是创建一个具有基表外键的新表 优缺点都有什么 If that is all you need1 then just add the simp
  • 如何使用 jQuery 的 form.serialize 但排除空字段

    我有一个搜索表单 其中包含许多文本输入和通过 GET 提交的下拉菜单 我希望通过在执行搜索时从查询字符串中删除空字段来获得更清晰的搜索网址 var form form var serializedFormStr form serialize
  • Rails - 使用部分或特定控制器视图时覆盖 页面元素

    有没有办法附加或覆盖Rails 视图中的页面元素 假设我有一些东西只想包含在特定视图中 我正在使用application html erb以表达我的其余观点 在这种情况下我不想丢弃application html erb但只是附加到一个特定
  • 在 C# 应用程序中存储数据的最佳方式是什么[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想制作 Cookbook 应用程序来存储和阅读 和更新 菜谱 或者其他任何东西来练习 OOP 编程和思维 但是 我不确定在 C Visual Studio Express 中哪种存储数据