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

yizhihongxing

下面是详细的“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日

相关文章

  • Android加载loading对话框的功能及实例代码(不退出沉浸式效果)

    Android加载loading对话框的功能及实例代码(不退出沉浸式效果) 在Android开发中,我们常常需要在加载数据时显示一个loading对话框来提示用户进行等待,本篇文章将介绍如何在不退出沉浸式效果的情况下,在Android应用程序中实现loading对话框的功能。 一、基本思路 要实现loading对话框的功能,我们需要完成以下步骤: 在布局文件…

    other 2023年6月25日
    00
  • 路由器默认账号和密码大全

    路由器默认账号和密码大全 简介 路由器默认账号和密码大全是一个用于收集互联网上各种路由器品牌的默认账号和密码的网站。该网站旨在帮助用户通过默认登录密码进入路由器管理界面,以便查看和修改路由器的设置和配置。 获取默认账号和密码 打开路由器默认账号和密码大全网站(https://www.routerpasswords.com/); 在网站顶部的搜索框中输入你所使…

    other 2023年6月27日
    00
  • scroll-view滚动到底部

    scroll-view滚动到底部 简介 在移动设备上,经常需要展示一些内容,并支持滚动。而很多时候,需要滚动到底部以加载更多内容。这时,我们可以使用scroll-view组件来实现。 scroll-view是一个支持滚动的容器组件,可以嵌套其他组件。当内容超过组件的大小时,可以滚动查看其余内容。 使用scroll-view组件 scroll-view通过设置…

    其他 2023年3月28日
    00
  • MySQL ifnull的嵌套使用说明

    MySQL IFNULL的嵌套使用说明 MySQL的IFNULL函数用于判断一个表达式是否为NULL,并在表达式为NULL时返回指定的替代值。IFNULL函数可以嵌套使用,以实现更复杂的逻辑判断和替代值的返回。下面是关于IFNULL函数嵌套使用的详细攻略。 语法 IFNULL(expr1, expr2) expr1:要判断是否为NULL的表达式。 expr2…

    other 2023年7月28日
    00
  • 苹果系统占用内存太大怎么办 手把手教你清理手机内存方法

    苹果系统占用内存太大的解决方法 苹果系统占用过多内存可能导致手机运行缓慢或出现其他问题。下面是一些手把手教你清理手机内存的方法,帮助你解决这个问题。 方法一:清理无用的应用程序 打开手机主屏幕,找到并点击“设置”图标。 在设置界面中,向下滑动并点击“通用”选项。 在通用设置中,继续向下滑动并点击“iPhone存储空间”。 等待片刻,系统会列出所有已安装应用程…

    other 2023年8月1日
    00
  • Npm link的作用与使用示例代码

    Npm link的作用与使用示例代码 作用 Npm link是一个用于在本地开发过程中创建软链接的工具。它允许我们将一个本地的npm包链接到另一个项目中,以便在开发过程中进行实时调试和测试。 使用步骤 以下是使用npm link的详细步骤: 在要链接的npm包的根目录下执行以下命令,将其注册为全局包: npm link 进入要使用该npm包的项目目录,执行以…

    other 2023年10月14日
    00
  • 详解C++编程中类的成员变量和成员函数的相关知识

    详解C++编程中类的成员变量和成员函数的相关知识 成员变量 在C++中,类的成员变量是类的一部分,用于存储类对象的数据。成员变量可以是任何C++数据类型,包括基本数据类型(如int、float)和自定义数据类型(如结构体、类)。 声明成员变量 在类的定义中,可以声明成员变量。通常,在类的私有部分声明成员变量,然后在公有部分提供访问这些变量的公有成员函数。 以…

    other 2023年6月28日
    00
  • Spring使用@Autowired为抽象父类注入依赖代码实例

    下面我将详细讲解如何使用@Autowired为抽象父类注入依赖: 前置条件 了解Java Spring框架基本概念以及注解的使用; 了解 Java代码中的抽象类的概念,以及抽象类在Spring框架中的作用。 解决问题 在使用Spring框架进行项目开发时,我们常常会使用抽象类来统一管理业务逻辑的基本流程,但在实现抽象类时,我们需要将某些依赖注入到其中,而这些…

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