引言

我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.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# 如何使用配置文件保存应用程序里的配置数据的更多相关文章

  1. .NET Core配置文件加载与DI注入配置数据

    .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更 ...

  2. [转].NET Core配置文件加载与DI注入配置数据

    本文转自:http://www.cnblogs.com/skig/p/6079187.html .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config ...

  3. ASP.NET Core应用程序的参数配置及使用(转载)

    本文结构 提前准备 参数配置方式 appsettings.json 环境变量 命令行参数 在控制器中使用配置参数 注入IConfiguration对象 注入IOptions对象 总结 应用程序的开发不 ...

  4. Java程序运行时,数据都保存到什么地方?

    程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: 寄存器 这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器 ...

  5. 程序启动读取和关闭时保存应用程序设置(QSettings)

    保存应用程序设置(QSettings)1. QSettings 类 QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等.在 Windo ...

  6. net core 小坑杂记之配置文件读取 02 (控制器里读)

    上次更新博客的时候提到了如何在EF的上下文里读取配置,这次介绍一下在控制器里如何读取. 先说一种简单易懂的: 首先以键值对的形式在appsettings里添加一条配置信息,接着Startup里注入配置 ...

  7. 在微信小程序里使用 watch 和 computed

    在开发 vue 的时候,我们可以使用 watch 和 computed 很方便的检测数据的变化,从而做出相应的改变,但是在小程序里,只能在数据改变时手动触发 this.setData(),那么如何给小 ...

  8. 保存画面为图片 当前MFC保存该程序为图片 c++ vc

    将屏幕保存为图片.使用vs2008编译通过. [cpp] view plaincopy #include "stdafx.h" #include <windows.h> ...

  9. 小程序里实现 watch 和 computed

    小程序里的自定义组件里是有数据监听器的,可以监听对应数据的变化来执行callBack,但是页面Page里没有对应的api就显的很生硬,比如某个数据变了(如切换城市)需要重新刷页面,如果不做监听,每次都 ...

随机推荐

  1. docker中怎样设置开机启动--随容器的启动而启动服务?

    docker可以说给我们的部署带来极大的方便和可逢凶化吉性!(懂的同学自然懂) 在初步了解之后,我们就能简单使用docker了. 刚开始玩docker时,可以基于系统级别的镜像做定制,比如基于  ce ...

  2. 2. CMake 系列 - 编译多文件项目

    目录 1. 编译不使用第三方库的项目 1.1 项目目录结构 1.2 相关代码 1.3 编译 2. 编译使用第三方库的项目 2.1 项目目录结构 2.2 相关代码 2.3 编译 1. 编译不使用第三方库 ...

  3. python爬虫数据解析之xpath

    xpath是一门在xml文档中查找信息的语言.xpath可以用来在xml文档中对元素和属性进行遍历. 在xpath中,有7中类型的节点,元素,属性,文本,命名空间,处理指令,注释及根节点. 节点 首先 ...

  4. 你真的了解webview么?

    你真的了解webview么? 写在前面: Webview是我们前端开发从PC端演进到移动端的一个重要载体,现在大家每天使用的App,webview都发挥着它的重要性.接下来让我们从webview看世界 ...

  5. Python面向对象 组合(选课系统示例)

    # Author : Kelvin # Date : 2019/1/15 20:44 """ 学校与老师关联 课程与老师和学校关联 """ ...

  6. 通过Jenkins定期清除为None的镜像

    在代码持续交付过程中,依靠Jenkins生产Docker镜像时,会生成许多的名为None的中间镜像,这些镜像在整个项目生产过程完毕后意义不大,还占着空间,需要定期清理,通过手动方式实在是繁琐,也就有了 ...

  7. python中的编码与解码

      编码与解码 首先,明确一点,计算机中存储的信息都是二进制的   编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显 ...

  8. Golang之变量去哪儿

    目录 什么是逃逸分析 为什么要逃逸分析 逃逸分析是怎么完成的 逃逸分析实例 总结 参考资料 写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的 ...

  9. Perl多线程(1):解释器线程的特性

    线程简介 线程(thread)是轻量级进程,和进程一样,都能独立.并行运行,也由父线程创建,并由父线程所拥有,线程也有线程ID作为线程的唯一标识符,也需要等待线程执行完毕后收集它们的退出状态(比如使用 ...

  10. sql 查询 某字段 重复次数 最多的记录

    需求  查询小时气象表中 同一日期.同一城市.同意检测站点  首要污染物出现出书最多的记录 第一步: 添加 排序字段 select StationID,RecordDate,CityID,Primar ...