C# 如何使用配置文件保存应用程序里的配置数据
引言
我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置。这样每次都要建立单独的配置类,并书写读写配置代码,相当麻烦。
期间也看了看.config文件的读写方式,感觉还是很麻烦,不如自己序列化来的踏实。
后来才猛然发现微软早提供好了settings,用以定义.config文件内容,并生成相应的强类型类,使用起来极其方便~,感觉就像在火星居住了半辈子突然发现还有地球这好地方*_*~
鉴于网上settings方面的资料不多、不详,我就以此文来介绍一下基本的用法,让小鸟们少走我那条破路,老鸟请直接从上空滑翔而过即可。
基本使用方法
首先建立一个WinForm项目,设计这样一个窗体:
通过“添加新项”功能添加一个MyApp.settings:
在打开的数据表格中做如下设置:
这样就设置好了a、b、c三个不同类型的配置变量,现在就可以在程序中使用它们了:
private void Form1_Load(object sender, EventArgs e)
{
numericUpDown1.Value = MyApp.Default.a;
textBox1.Text = MyApp.Default.b;
checkBox1.Checked = MyApp.Default.c;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
MyApp.Default.a = numericUpDown1.Value;
MyApp.Default.b = textBox1.Text;
MyApp.Default.c = checkBox1.Checked;
MyApp.Default.Save();
}
通过上面的代码就可以在窗体开闭时分别加载、保存配置了。
运行抓图:
复杂数据类型支持情况
settings支持存储一些较为复杂的数据,比如Color、Size等类型,可以自行选择:
但并不是所有类型都可以支持,比如FileInfo类型就没有,泛型也没有,自定义类型更是不受支持的,如果需要存储这些特殊类型,就得用其他配置方案了。
读写复杂数据类型
我们以ArrayList类型为例,通过它在原程序的基础上实现记录每次关闭程序时间的功能。
首先添加一个配置变量d,其类型为System.Collections.ArrayList:
在窗体中增加一个ListBoxt,然后修改后台代码为:
高亮部分为新增的代码。
多次运行以测试:
可以看到每次的程序关闭时间都被记录并显示。
“用户”和“应用程序”
你可能注意到数据表格中“范围”这里全是“用户”:
如果改成另外一个选项,即“应用程序”会怎样呢?
报错了,我们的配置变量变成只读的了,所以这里可以简单地把它们理解为:
用户=可读写
应用程序=只读
“应用程序”选项应当是用于设定一些程序运行所必须的重要变量,比如导航网址、数学运算参数等,这些配置项如果让用户篡改就会出问题了,所以要只读。
数据被存在哪里?
你可能会发现编译后在Debug目录中有个“SettingTest.exe.config”,但无论如何操作程序,这个配置文件里始终都是描述的默认配置。
其实数据是被存在了“C:\Users\SkyD\AppData\Local\”目录中(我这是Windows7,XP或以下版本可能不是这里)
我在“C:\Users\SkyD\AppData\Local\SettingTest\SettingTest.vshost.exe_Url_ffofch2tvz5bil2xbhdayqbnqwppy2ce\1.0.0.0”这个目录中找到了配置文件(user.config),这是其描述的配置信息:
结语
虽然settings无法实现对一些复杂类型及自定义类型的支持,但是在多数情况下,用它来存储程序配置已是绰绰有余了,在够用的前提下,不要重复造轮子啦。
C# 如何使用配置文件保存应用程序里的配置数据的更多相关文章
- .NET Core配置文件加载与DI注入配置数据
.NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更 ...
- [转].NET Core配置文件加载与DI注入配置数据
本文转自:http://www.cnblogs.com/skig/p/6079187.html .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config ...
- ASP.NET Core应用程序的参数配置及使用(转载)
本文结构 提前准备 参数配置方式 appsettings.json 环境变量 命令行参数 在控制器中使用配置参数 注入IConfiguration对象 注入IOptions对象 总结 应用程序的开发不 ...
- Java程序运行时,数据都保存到什么地方?
程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: 寄存器 这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器 ...
- 程序启动读取和关闭时保存应用程序设置(QSettings)
保存应用程序设置(QSettings)1. QSettings 类 QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等.在 Windo ...
- net core 小坑杂记之配置文件读取 02 (控制器里读)
上次更新博客的时候提到了如何在EF的上下文里读取配置,这次介绍一下在控制器里如何读取. 先说一种简单易懂的: 首先以键值对的形式在appsettings里添加一条配置信息,接着Startup里注入配置 ...
- 在微信小程序里使用 watch 和 computed
在开发 vue 的时候,我们可以使用 watch 和 computed 很方便的检测数据的变化,从而做出相应的改变,但是在小程序里,只能在数据改变时手动触发 this.setData(),那么如何给小 ...
- 保存画面为图片 当前MFC保存该程序为图片 c++ vc
将屏幕保存为图片.使用vs2008编译通过. [cpp] view plaincopy #include "stdafx.h" #include <windows.h> ...
- 小程序里实现 watch 和 computed
小程序里的自定义组件里是有数据监听器的,可以监听对应数据的变化来执行callBack,但是页面Page里没有对应的api就显的很生硬,比如某个数据变了(如切换城市)需要重新刷页面,如果不做监听,每次都 ...
随机推荐
- 从一张图开始,谈一谈.NET Core和前后端技术的演进之路
从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...
- android学习---下拉刷新组建
Google官方的下拉刷新组建 activity代码实现: /** * The SwipeRefreshLayout should be used whenever the user * can re ...
- springboot~jpa个性化数据操作接口
jap是个全能仓储 jap把很多数据库访问都封装了,并且提交了默认的一切数据方法签名的约定,大家按着约定走,可以不写SQL语句,而如果比较复杂的情况,也需要写SQL,这里我们介绍一下查询和修改的实例方 ...
- SpringBoot实用小知识之Maven中dependencys和dependencymanagement区别
利用pom管理引用包时,如果是单项目的话就直接在dependencies引用了,若有一个大工程项目里面包含多个子模块,则为了所有项目模块包的版本统一和好管理,则需要用到dependencyManage ...
- Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作
只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目. Spring Boot连接MySQL数据库 连接了MySQL数据库. 本文在之前 ...
- Writing a Simple Publisher and Subscriber
用c++实现一个publisher/subscriber publisher #include "ros/ros.h" #include "std_msgs/String ...
- MySQL逻辑架构概述
1.MySQL逻辑架构 MySQL逻辑架构图 MySQL逻辑架构分四层 1.连接层:主要完成一些类似连接处理,授权认证及相关的安全方案. 2.服务层:在 MySQL据库系统处理底层数据之前的所有工作都 ...
- 可编辑且宽度自适应input
默认的input项是比较难看的,并且它的宽度还无法随着输入而变化,这样未免有些呆板,不过借助JavaScript可以达到宽度自适应的效果,下面为了方便使用了jQuery: <div class= ...
- HTML页面转换为Sharepoint母版页(实战)
分享人:广州华软 极简 一. 前言 SharePoint有母版页.布局页.母版页存放着如头部(顶部菜单.导航),底部等比较通用部分,通常网站只需一套即可:而布局页,则存放着主要内容部分,根据页面需要, ...
- Dynamics 365-关于Solution的那些事(三)
这一篇的内容,是关于Solution的使用建议的,如果大家有什么实用的建议,欢迎留言讨论. 一. 版本控制 Solution是有版本号的,率性的人可能在新建一个solution的时候,直接赋值1.0, ...