Using Nini .NET Configuration Library
Using Nini .NET Configuration Library
When developing a desktop application, there will be times when you want to store settings for your program. A database is one option, but on Windows, you might just wish to have your settings stored in an INI file. One way to work with an INI file in C# is with the Nini Library. This makes it quite easy to read from and write to an INI file.
Let’s get started.
After installing the library, we’ll need to set our namespace.
1
|
using Nini.Config;
|
What will our INI file look like? Something like this:
[Options]
Zipped = 0
Filename = test.txt
1
2
3
4
|
;conf.ini
[Options]
Zipped=0
Filename=test.txt
|
For my application, I decided to make a class devoted to the configuration file. So, let’s define that and a few other variables.
{
string NL = Environment.NewLine; // New line character
private string configFile = "conf.ini"; // Our INI file
IConfigSource config; // Instance of our config
}
1
2
3
4
5
6
7
8
|
publicclassOurConfig
{
stringNL=Environment.NewLine;// New line character
privatestringconfigFile="conf.ini";// Our INI file
IConfigSource config;// Instance of our config
}
|
Now that we have our variables declared, let’s create a couple of useful methods.
{
config.Configs["Options"].Set("Zipped", zipped);
}
public void set_filename(string fname)
{
config.Configs["Options"].Set("Filename", fname);
}
1
2
3
4
5
6
7
8
9
|
publicvoidset_is_zip(intzipped)
{
config.Configs["Options"].Set("Zipped",zipped);
}
publicvoidset_filename(stringfname)
{
config.Configs["Options"].Set("Filename",fname);
}
|
These two methods will update the INI file with new settings, should we change them in our program. Of course, if we make these changes, they need to be saved. Thankfully, we can declare something in our constructor (which we will write a little later) that will auto-save our changes as we make them.
1
|
config.AutoSave=true;
|
Now, let’s create a pair of methods to return the data. This will be useful in our program when we need to use these settings.
{
return config.Configs["Options"].Get("Zipped");
}
public string return_filename()
{
return config.Configs["Options"].Get("Filename");
}
1
2
3
4
5
6
7
8
9
|
publicintreturn_is_zip()
{
returnconfig.Configs["Options"].Get("Zipped");
}
publicstringreturn_filename()
{
returnconfig.Configs["Options"].Get("Filename");
}
|
With these methods, we now have a basic class for handling a configuration file. All that is left is our constructor.
But before we get to the constructor, there is something else I created. What if our INI file doesn’t exist? I decided that I would make a function to create a default INI file, should the old one not exist anymore. This is also useful if we want to distribute our program without an INI file.
{
// Put default values into the INI file
// Essentially, we're writing a blank file, so this is fairly simple
string toWrite = ";conf.ini" + NL
+ "[Options]" + NL
+ "Zipped = 0" + NL
+ "Filename = test.txt" + NL;
System.IO.File.WriteAllText(@"conf.ini", toWrite);
}
1
2
3
4
5
6
7
8
9
10
11
|
privatevoidfill_new_ini()
{
// Put default values into the INI file
// Essentially, we're writing a blank file, so this is fairly simple
stringtoWrite=";conf.ini"+NL
+"[Options]"+NL
+"Zipped = 0"+NL
+"Filename = test.txt"+NL;
System.IO.File.WriteAllText(@"conf.ini",toWrite);
}
|
We can do a check when we initialize our class that will check to see whether or not this file exists. If not, we’ll create it so we can work with it.
That makes this our constructor:
{
// Initialize the INI file if it doesn't exist
try
{
configFile = new IniConfigSource("conf.ini");
}
catch (Exception ex)
{
// Write default values into it
fill_new_ini();
configFile = new IniConfigSource("conf.ini");
}
configFile.AutoSave = true; // Auto save config file as we make changes
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
publicOurConfig()
{
// Initialize the INI file if it doesn't exist
try
{
configFile=newIniConfigSource("conf.ini");
}
catch(Exception ex)
{
// Write default values into it
fill_new_ini();
configFile=newIniConfigSource("conf.ini");
}
configFile.AutoSave=true;// Auto save config file as we make changes
}
|
Our whole class thus looks like this:
public class OurConfig
{
string NL = Environment.NewLine; // New line character
private string configFile = "conf.ini"; // Our INI file
IConfigSource config; // Instance of our config
public OurConfig()
{
// Initialize the INI file if it doesn't exist
try
{
configFile = new IniConfigSource("conf.ini");
}
catch (Exception ex)
{
// Write default values into it
fill_new_ini();
configFile = new IniConfigSource("conf.ini");
}
configFile.AutoSave = true; // Auto save config file as we make changes
}
private void fill_new_ini()
{
// Put default values into the INI file
// Essentially, we're writing a blank file, so this is fairly simple
string toWrite = ";conf.ini" + NL
+ "[Options]" + NL
+ "Zipped = 0" + CL
+ "Filename = test.txt" + CL;
System.IO.File.WriteAllText(@"conf.ini", toWrite);
}
public void set_is_zip(int zipped)
{
config.Configs["Options"].Set("Zipped", zipped);
}
public void set_filename(string fname)
{
config.Configs["Options"].Set("Filename", fname);
}
public int return_is_zip()
{
return config.Configs["Options"].Get("Zipped");
}
public string return_filename()
{
return config.Configs["Options"].Get("Filename");
}
} // End OurConfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
using Nini.Config;
publicclassOurConfig
{
stringNL=Environment.NewLine;// New line character
privatestringconfigFile="conf.ini";// Our INI file
IConfigSource config;// Instance of our config
publicOurConfig()
{
// Initialize the INI file if it doesn't exist
try
{
configFile=newIniConfigSource("conf.ini");
}
catch(Exception ex)
{
// Write default values into it
fill_new_ini();
configFile=newIniConfigSource("conf.ini");
}
configFile.AutoSave=true;// Auto save config file as we make changes
}
privatevoidfill_new_ini()
{
// Put default values into the INI file
// Essentially, we're writing a blank file, so this is fairly simple
stringtoWrite=";conf.ini"+NL
+"[Options]"+NL
+"Zipped = 0"+CL
+"Filename = test.txt"+CL;
System.IO.File.WriteAllText(@"conf.ini",toWrite);
}
publicvoidset_is_zip(intzipped)
{
config.Configs["Options"].Set("Zipped",zipped);
}
publicvoidset_filename(stringfname)
{
config.Configs["Options"].Set("Filename",fname);
}
publicintreturn_is_zip()
{
returnconfig.Configs["Options"].Get("Zipped");
}
publicstringreturn_filename()
{
returnconfig.Configs["Options"].Get("Filename");
}
}// End OurConfig
|
That’s how simple it can be to work with your own INI files in C#.
Did you find this useful? Let me know in the comments!
Using Nini .NET Configuration Library的更多相关文章
- Java资源大全中文版(Awesome最新版)
Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...
- 使用.NET Framework的配置文件app.config
在一般的项目中,为了使你的代码更加灵活,更方便调整,减少不必要的hard code,我们都在config中添加许多配置信息,一般可以选择.NET自带的配置文件形式app.config或者web项目中的 ...
- Awesome C/C++
Awesome C/C++ A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things. In ...
- P6 EPPM 16.1 安装和配置指南 1
安装和配置指南下一topiccontents这些指南解释如何安装和配置数据库服务器,和P6 EPPM,模块:他们还提供在P6 EPPM能够解决所有模块的概述.标准指南帮助您配置和部署应用程序向导P6 ...
- Linux下用C读取配置文件。类似ini这样。
Introduction ccl is the customizable configuration library, a collection of functions for applicatio ...
- STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...
- awesome-java
Awesome Java A curated list of awesome Java frameworks, libraries and software. Awesome Java Ancient ...
- awesome cpp
https://github.com/fffaraz/awesome-cpp Awesome C/C++ A curated list of awesome C/C++ frameworks, lib ...
- ASF (0) - ASF Java 项目总览
Apache .NET Ant Library This is a library of Ant tasks that help developing .NET software. It includ ...
随机推荐
- cocoa pods
# cocoa pods * `CocoaPods` 是 iOS 最常用最有名的类库管理工具 * 作为 iOS 程序员,掌握 `CocoaPods` 的使用是必不可少的基本技能 ## pod 命令汇总 ...
- html-----013----实体字符/HTML URL 编码
<!DOCTYPE> 声明 版本 年份 HTML 1991 HTML+ 1993 HTML 2.0 1995 HTML 3.2 1997 HTML 4.01 1999 XHTML 1.0 ...
- arcgisserver
http://www.cnblogs.com/hll2008/archive/2008/11/14/1333828.html
- OpenJudge 2775 文件结构“图”/ Poj 1057 FILE MAPPING
1.链接地址: http://bailian.openjudge.cn/practice/2775 http://poj.org/problem?id=1057 2.题目: 总时间限制: 1000ms ...
- mysql 断电 启动不了 start: Job failed to start
公司内部服务器,突然断电,造成无法启动的解决办法 把my.cnf中配置的datadir路径下的ib_logfile* (比如ib_logfile0, lb_logfile1....)文件移到另外一个目 ...
- winform 禁用鼠标滚轮
新建一个类,继承IMessageFilter public class FormFilter : IMessageFilter { public bool PreFilterMessage(ref M ...
- Spring Cloud Eureka Server 启停状态监控
目前发现如下的api: 当时没有找到文档 http://localhost:8761/eureka/apps 参考文章:(此文中api带有v2我自己试验不需要v2) http://blog.csdn. ...
- CentOS 6.4 播放avi格式的视频文件
1. 需要先进行相关的yum源的导入: rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0. ...
- 使用GetLogicalDriveStrings获取驱动器根路径
使用GetLogicalDriveStrings获取驱动器根路径,并使用自定义的GetDriveInfo函数获取驱动器的属性. VS2012 + win7 x64下调试通过. #include < ...
- C语言-03流程控制
1.选择结构 char c = '+'; ; ; // 如果要在case后面定义新的变量,必须用大括号{}包住 注意变量的作用域的紊乱 if语句不加括号时,也要注意此问题 switch (c) { c ...