迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 C# 中读取和写入 INI 文件

作者:迹忆客 最近更新:2024/02/01 浏览次数:

本教程教授如何在 C# 中读取和写入 INI 文件。


C# 中的 INI 文件是什么

初始化文件,通常称为 INI 文件,是用于存储程序配置信息的文本文件。 .NET 框架本身不支持 INI 文件。

你可以利用 Windows API 方法使用平台调用服务来写入和读取文件。本教程将构建一个表示 INI 文件的类,并使用 Windows API 操作来操作它们。

要使用 INI 文件,我们需要两个 Windows API 函数,WritePrivateProfileStringReadPrivateProfileString


C# 中使用 WritePrivateProfileString 来保存 INI 文件中新的和修改的设置

INI 文件中,WritePrivateProfileString 保存新的和修改的设置。结构如下。

bool WritePrivateProfileString(string name, string key, string value, string filepath);

如果写入成功,则该函数返回布尔结果,如果写入失败,则返回 false。以下是参数。

  1. 要写入的部分名称由 name 指定。
  2. 要设置的键名由 key 指定。
  3. 键的值由 value 指定。
  4. filepath 保存要更新的 INI 文件的位置。

C# 中使用 ReadPrivateProfileString 从一个 INI 文件中读取数据

ReadPrivateProfileStringINI 文件中读取数据。该函数根据其应用程序读取单个值、节中的所有键名或所有部分的名称。

int GetPrivateProfileString(string name, string key, string default, StringBuilder ReturnedVal,
                            int maxsize, string filepath);

函数将返回值中的字符数作为无符号整数返回。以下是参数。

  1. 要读取的部分名称由 name 指定。如果将其设置为 null,则将返回所有部分名称。
  2. 要读取的键名由 key 指定。如果设置为 null 而 name 不为 null,则返回的值将包括给定部分中键的名称。
  3. 如果键不存在,default 指定要返回的默认值。
  4. ReturnedVal 接收用作缓冲区的字符串。操作的结果被写入缓冲区,修改字符串的值。
  5. ReturnedVal 中将返回的字符串的最大大小由 maxsize 指定。这应该与缓冲区大小相同。如果从 INI 文件中读取的值比 ReturnedVal 长,它将被减少。
  6. 要读取的 INI 文件的位置和名称由 filepath 指定。该文件必须存在。

C# 中读取和写入 INI 文件

让我们创建一个类来保存我们将使用的 Windows API 函数的结构,因为我们已经看到了它们的结构。

添加以下库。

using System;
using System.IO;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Text;

创建一个名为 ReadWriteINIfile 的新类并使用以下类代码。因为类本身没有访问修饰符,所以它会有一个内部作用域。

IniFile 类将访问 API 函数而不将它们暴露给公众。

public class ReadWriteINIfile {
  [DllImport("kernel32")]
  private static extern long WritePrivateProfileString(string name, string key, string val,
                                                       string filePath);
  [DllImport("kernel32")]
  private static extern int GetPrivateProfileString(string section, string key, string def,
                                                    StringBuilder retVal, int size,
                                                    string filePath);
}

我们现在可以构造 ReadWriteINIfile 类,允许我们在不知道 API 操作的情况下读取 INI 文件。

将以下代码添加到类以创建构造函数。

public ReadWriteINIfile(string inipath) {
  path = inipath;
}

WritePrivateProfileString 用于用值填充 INI 文件。下面的代码中使用了三个参数来接受节和键名以及要保存的值。

在对 WritePrivateProfileString 的调用中,这些值与传递给构造函数的文件名组合在一起。

public void WriteINI(string name, string key, string value) {
  WritePrivateProfileString(name, key, value, this.path);
}

ReadINI 的参数是要读取的 namekey。上面代码的第一行定义了字符串并将其值设置为几个等于其最大长度的空格。

GetPrivateProfileString 函数接收此字符串作为要填充的缓冲区。使用下面的代码。

public string ReadINI(string name, string key) {
  StringBuilder sb = new StringBuilder(255);
  int ini = GetPrivateProfileString(name, key, "", sb, 255, this.path);
  return sb.ToString();
}

完整源代码:

using System;
using System.IO;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Text;

namespace Test {
  class Program {
    static void Main(string[] args) {}
  }
  public class ReadWriteINIfile {
    [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string name, string key, string val,
                                                         string filePath);
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def,
                                                      StringBuilder retVal, int size,
                                                      string filePath);

    public string path;

    public ReadWriteINIfile(string inipath) {
      path = inipath;
    }
    public void WriteINI(string name, string key, string value) {
      WritePrivateProfileString(name, key, value, this.path);
    }
    public string ReadINI(string name, string key) {
      StringBuilder sb = new StringBuilder(255);
      int ini = GetPrivateProfileString(name, key, "", sb, 255, this.path);
      return sb.ToString();
    }
  }
}

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C# 中从字哈希值符串计算 MD5 哈希值

发布时间:2024/02/02 浏览次数:178 分类:编程语言

本教程教授如何从 C# 中的字符串计算 MD5 哈希值。散列算法是用于将任意输入数据映射到固定大小散列的数学算法。它们用于多种用途,例如将数据存储在哈希值映射、密码验证、消息消化和加

用 C# 发送一个简单的 SSH 命令

发布时间:2024/02/02 浏览次数:161 分类:编程语言

本教程讨论如何在 C# 中发送简单的 SSH 命令。指南将讨论如何在 C# 中发送简单的 SSH 命令。在 C# 中发送一个简单的 SSH 命令

在 C# 中检查对象是否为空

发布时间:2024/02/02 浏览次数:100 分类:编程语言

在 C# 中,有两种主要方法可用于检查对象是否为 null:==运算符和 is 运算符。本教程将讨论在 C# 中检查对象是否为空的方法。在 C# 中使用 == 运算符检查空对象

在 C# 中删除对象

发布时间:2024/02/02 浏览次数:82 分类:编程语言

我们可以通过在 C# 中为其分配空值来删除用户定义类的对象。本教程将讨论在 C# 中删除用户定义类的对象的方法。在 C# 中通过给它分配 null 值来删除一个用户定义的类对象

在 C# 中将对象序列化为 XML

发布时间:2024/02/02 浏览次数:91 分类:编程语言

XmlSerializer 类可用于将类对象序列化为 C# 中的 XML 文件或字符串。本教程将讨论如何在 C# 中将类对象序列化为 XML 文件或字符串。

在 C# 中将 XML 反序列化为对象

发布时间:2024/02/02 浏览次数:135 分类:编程语言

在本教程中,通过示例了解将 xml 反序列化为 C# 对象的不同方法。使用 Visual Studio 的粘贴特殊功能、xsd 工具,并在 C# 中键入等效类。

Linux 上的开发配置 C#

发布时间:2024/02/02 浏览次数:192 分类:编程语言

本文介绍如何设置 C# 语言以在 Linux 上进行开发。如果你对在 Linux 中开发 C# 应用程序的方法感兴趣,这篇文章是专门为你准备的。

C# 中的构造函数链

发布时间:2024/02/02 浏览次数:125 分类:编程语言

本教程演示如何使用标准语法在 C# 中进行构造函数链接本教程将演示如何在 C# 中进行构造函数链接。要了解构造函数链,首先必须了解以下概念。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便