迹忆客 专注技术分享

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

在 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# 中发出 HTTP POST Web 请求

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

在 C# 中,可以使用 3 种主要方法来发出 HTTP POST Web 请求:WebClient 类,HttpWebRequest 类和 HttpClient 类。本教程将讨论在 C# 中发出 HTTP POST Web 请求的方法。使用 C# 中的 WebClient 类发出 HTTP POST Web 请求

在 C# 中调整图像大小

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

有两种主要方法可用于在 C# 中调整图像的大小,Bitmap 类构造函数和 graphics.DrawImage()函数。在本教程中,我们将讨论在C#中调整图像大小的方法。我们将带您完成整个过程,从加载原始图像到保

在 C# 中下载图片

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

有 3 种主要方法可用于下载 C# 中的图片,WebClient.DownloadFile()函数,Bitmap 类和 Image.FromStream()函数。在 C# 中使用 WebClient 类下载图片 WebClient 类提供了用于向 C# 中的 URL 发送数据和从 URL 接收数据

在 C# 中使用秒表

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

我们可以使用 Stopwatch 类来计算 C# 中的经过时间。使用 C# 中的秒表类计算经过时间 Stopwatch 类在 C# 中准确测量经过的时间。

在 C# 中获取可执行路径

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

有 3 种主要方法可用于获取 C# 中程序的可执行路径,即 Assembly 类,AppDomain 类和 Path 类。本教程将介绍获取 C# 代码的可执行路径的方法。使用 C# 中的 Assembly 类获取可执行路径

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便