C#操作INI配置文件示例详解

下面是详细的“C#操作INI配置文件示例详解”攻略。

什么是INI文件?

INI文件是一种简单的文本文件,它通常用于存储程序的配置信息。INI文件由若干个节组成,每个节中包含若干个键值对,键值对用等号连接,例如:

[Database]
Server=127.0.0.1
Port=3306
Username=root
Password=123456

C#如何操作INI文件?

C#中操作INI文件需要使用Win32的API函数来实现,这些函数定义在kernel32.dll中。具体使用方法如下:

1. 引入DLL

首先需要引入kernel32.dll这个DLL文件,可以通过以下代码实现:

[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);

[DllImport("kernel32.dll")]
private static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);

2. 读取INI文件

读取INI文件需要使用GetPrivateProfileString函数,该函数中有五个参数:

  • lpAppName:节的名字,如果为NULL,则表示默认节。
  • lpKeyName:键的名字。
  • lpDefault:键不存在时的默认值。
  • lpReturnedString:返回值的缓冲区。
  • nSize:缓冲区大小。

以下是读取INI文件的示例代码:

string filePath = "config.ini";
string sectionName = "Database";
string keyName = "Server";
string defaultValue = "localhost";
StringBuilder buffer = new StringBuilder(256);
int bufferSize = 256;

int result = GetPrivateProfileString(sectionName, keyName, defaultValue, buffer, bufferSize, filePath);

string value = buffer.ToString();
Console.WriteLine("读取到的值为:" + value);

在这个示例中,我们读取了名为config.ini的INI文件中Database节中的Server键的值,如果键不存在,则返回默认值localhost

3. 写入INI文件

写入INI文件需要使用WritePrivateProfileString函数,该函数中有四个参数:

  • lpAppName:节的名字,如果为NULL,则表示默认节。
  • lpKeyName:键的名字。
  • lpString:要写入的值。
  • lpFileName:INI文件的路径。

以下是写入INI文件的示例代码:

string filePath = "config.ini";
string sectionName = "Database";
string keyName = "Server";
string value = "127.0.0.1";

bool result = WritePrivateProfileString(sectionName, keyName, value, filePath);

if(result)
{
    Console.WriteLine("写入成功!");
}
else
{
    Console.WriteLine("写入失败!");
}

在这个示例中,我们将名为config.ini的INI文件中Database节中的Server键的值修改为127.0.0.1

示例说明

示例1:读取数据库配置信息

假设我们有一个Windows窗体应用程序,需要读取数据库的配置信息。我们可以将数据库的地址、端口、用户名和密码放在一个名为config.ini的INI文件中,如下所示:

[Database]
Server=127.0.0.1
Port=3306
Username=root
Password=123456

然后在应用程序中,使用以上提到的读取INI文件的方法来读取config.ini文件中的配置信息,如下所示:

string filePath = "config.ini";
string sectionName = "Database";
string serverKeyName = "Server";
string portKeyName = "Port";
string usernameKeyName = "Username";
string passwordKeyName = "Password";
string defaultValue = "";
StringBuilder buffer = new StringBuilder(256);
int bufferSize = 256;

string server = ReadIniValue(filePath, sectionName, serverKeyName, defaultValue, buffer, bufferSize);
string port = ReadIniValue(filePath, sectionName, portKeyName, defaultValue, buffer, bufferSize);
string username = ReadIniValue(filePath, sectionName, usernameKeyName, defaultValue, buffer, bufferSize);
string password = ReadIniValue(filePath, sectionName, passwordKeyName, defaultValue, buffer, bufferSize);

// 使用读取到的配置信息来连接数据库

示例2:保存窗体的位置和大小

假设我们有一个Windows窗体应用程序,用户可以自由地调整窗体的位置和大小。我们希望在下一次打开应用程序时,能够加载用户上一次关闭应用程序前的窗体位置和大小。我们可以将窗体的位置和大小信息保存在一个名为settings.ini的INI文件中,如下所示:

[Form]
Left=200
Top=200
Width=800
Height=600

然后在应用程序中,使用以上提到的写入INI文件的方法来保存settings.ini文件中的信息,如下所示:

string filePath = "settings.ini";
string sectionName = "Form";
string leftKeyName = "Left";
string topKeyName = "Top";
string widthKeyName = "Width";
string heightKeyName = "Height";
string leftValue = this.Left.ToString();
string topValue = this.Top.ToString();
string widthValue = this.Width.ToString();
string heightValue = this.Height.ToString();

WriteIniValue(filePath, sectionName, leftKeyName, leftValue);
WriteIniValue(filePath, sectionName, topKeyName, topValue);
WriteIniValue(filePath, sectionName, widthKeyName, widthValue);
WriteIniValue(filePath, sectionName, heightKeyName, heightValue);

在下一次打开应用程序时,我们可以使用以上提到的读取INI文件的方法来读取settings.ini文件中的信息,并将窗体的位置和大小修改为读取到的值,如下所示:

string filePath = "settings.ini";
string sectionName = "Form";
string leftKeyName = "Left";
string topKeyName = "Top";
string widthKeyName = "Width";
string heightKeyName = "Height";
string defaultValue = "0";
StringBuilder buffer = new StringBuilder(256);
int bufferSize = 256;

int left = int.Parse(ReadIniValue(filePath, sectionName, leftKeyName, defaultValue, buffer, bufferSize));
int top = int.Parse(ReadIniValue(filePath, sectionName, topKeyName, defaultValue, buffer, bufferSize));
int width = int.Parse(ReadIniValue(filePath, sectionName, widthKeyName, defaultValue, buffer, bufferSize));
int height = int.Parse(ReadIniValue(filePath, sectionName, heightKeyName, defaultValue, buffer, bufferSize));

this.Left = left;
this.Top = top;
this.Width = width;
this.Height = height;

这样,在下一次打开应用程序时,窗体就会自动恢复到上一次关闭时的位置和大小了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#操作INI配置文件示例详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • ioncube

    当然,我很乐意为您提供有关“ionCube”的完整攻略。以下是详细的步骤和两个示例: 1. 什么是ionCube? ionCube是一种流行的PHP加密和解密工具,用于保护PHP应用程序的源代码。它可以将PHP源代码编译成加密的字节码,以防止未经授权的访问和修改。ionCube还提供了一些其他功能,如加速PHP应用程序的执行速度和优化PHP代码。 2. io…

    other 2023年5月6日
    00
  • git切换远程分支

    下面是关于如何切换远程分支的详细攻略。 1. 查看远程分支 在切换远程分支之前,需要先查看已有的远程分支。可以使用以下命令查看: git branch -r 其中,”r”代表”remote”,表示查看远程分支。执行该命令后,会列出当前仓库连接的所有远程分支。 2. 切换远程分支 在上一步中查看到远程分支之后,就可以使用以下命令来切换到需要操作的远程分支: g…

    其他 2023年4月16日
    00
  • php递归创建目录的方法

    下面我来详细讲解一下在PHP中如何递归创建目录。 什么是递归创建目录 递归创建目录是指在创建目录时,如果该目录的上级目录不存在,就会先创建上级目录,然后再创建当前目录的过程,一直进行到最后一级目录。 PHP递归创建目录的方法 PHP中有一个内置的函数mkdir()可以用来创建目录,但是该函数只能一次性创建一个目录,无法递归创建。如果要递归创建目录,就需要写递…

    other 2023年6月27日
    00
  • Java读取Oracle大字段数据(CLOB)的2种方法

    下面我将通过Markdown格式的文本向您详细讲解Java读取Oracle大字段数据(CLOB)的2种方法。 准备工作 在使用Java读取Oracle CLOB字段之前,需要先导入相关的Java库: import java.io.BufferedReader; import java.io.IOException; import java.io.InputS…

    other 2023年6月25日
    00
  • Mysql 实现字段拼接的三个函数

    要实现MySQL的字段拼接,可以使用以下三个函数: CONCAT CONCAT_WS GROUP_CONCAT 1. CONCAT函数 CONCAT 函数实现了两个或多个字符串的拼接。 语法: CONCAT(string1,string2,…,stringN) 示例: SELECT CONCAT(‘Hello’, ‘ ‘, ‘world’) AS res…

    other 2023年6月25日
    00
  • Java中Boolean和boolean的区别详析

    下面是“Java中Boolean和boolean的区别详析”的完整攻略。 Boolean和boolean的区别 在Java中,Boolean和boolean都可以用来表示一个布尔值。但是它们之间有一些区别。Boolean是一个类,而boolean是一个基本数据类型。下面我们来详细分析一下它们之间的区别。 Boolean是一个类 Boolean是一个类,而不是…

    other 2023年6月27日
    00
  • angular项目中使用antd日历组件

    以下是关于“Angular项目中使用Antd日历组件”的完整攻略,过程中包含两个示例。 背景 Antd是一个基于React的UI组件库但是它也提供了一些Angular组件。其中,Antd的日历组件非常实用,可以帮助我们快速构建日历。本攻略将介绍如何在Angular项目中使用Antd日历组件。 基本原理 在Angular项目中使用Antd日历组,我们需要先安装…

    other 2023年5月9日
    00
  • Java数据结构实现二维数组与稀疏数组转换详解

    Java数据结构实现二维数组与稀疏数组转换详解 一、二维数组与稀疏数组 在介绍二维数组与稀疏数组的转换之前,需要先了解它们的定义和特点。 1.二维数组 二维数组是一个由多个一维数组组成的数组。可以将它理解为是一个由行和列构成的矩阵。其中,行和列的数量是固定的,而且必须预先指定。 二维数组的声明方式为: 数据类型[][] 数组名; 例: int[][] arr…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部