C#怎么操作INI配置文件 C#如何读取和写入INI格式的配置文件内容【基础】

裘德小鎮的故事

裘德小鎮的故事

2026-03-30

885人浏览

原创

ini 文件读写需通过 pinvoke 调用 windows api(如 getprivateprofilestring),c# 标准库不支持;仅限 windows,文件路径须绝对,编码须为 ansi 或 utf-16 le(带 bom),跨平台应优先选用 appsettings.json 或 iniparser 等替代方案。

c#怎么操作ini配置文件 c#如何读取和写入ini格式的配置文件内容【基础】

INI 文件没有内置支持,得靠 PInvoke 调用 Windows API

C# 标准库不提供原生的 INI 文件读写能力。很多人以为 ConfigurationManagerIConfiguration 能直接处理 .ini,其实不能——它们只认 .configappsettings.json 这类格式。GetPrivateProfileStringWritePrivateProfileString 是 Windows API 提供的唯一直接支持方式,必须用 PInvoke 封装。

  • 仅限 Windows 平台;跨平台项目(如 .NET 6+ Linux/macOS)会直接失败
  • 调用前需确保 INI 文件路径是绝对路径,相对路径容易因工作目录变化而读不到
  • 函数对 section 名和 key 名大小写不敏感,但值内容保留原始大小写
  • 如果文件不存在,读取时返回空字符串,写入时会自动创建文件
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
private static extern uint GetPrivateProfileString(
    string lpApplicationName,
    string lpKeyName,
    string lpDefault,
    StringBuilder lpReturnedString,
    uint nSize,
    string lpFileName);

读取 INI 时最常见的三个错误现象

不是代码写错,而是对 API 行为理解偏差导致的“读不出来”:

  • GetPrivateProfileString 返回 0:通常是因为传了 null 或空字符串给 lpApplicationNamelpKeyName,而不是“没找到”
  • 读到空值:检查文件编码——API 只正确处理 ANSI 或 UTF-16 LE(带 BOM),UTF-8 无 BOM 的文件会乱码或全空
  • 读到旧值:Windows 会缓存 INI 内容,尤其在快速连续读写时;实际无需手动刷新,但若调试中反复修改文件又读不到新值,重启进程最可靠

写入 INI 必须注意换行与节头格式

WritePrivateProfileString 看似简单,但生成的文件格式直接影响其他工具(比如记事本、旧版 VB6 程序)能否识别:

C函数速查手册(CHM版)
C函数速查手册(CHM版)

C函数速查手册(CHM版)

下载
  • 它不会自动添加空行分隔 section,也不会补全缺失的 [section] 头——你写哪个 key,它只动那一行,其余全不动
  • 写入空字符串 "" 会删除该 key;写入 null 会导致 PInvoke 异常
  • 写入含等号 = 的值会被截断(API 把第一个 = 当作键值分隔符),要提前替换为其他占位符再写
  • 写入后文件编码保持原样,不会转成 UTF-8;若原文件是 ANSI,新写入的中文可能显示为乱码(取决于系统默认 ANSI 代码页)

替代方案比硬刚 API 更靠谱的场景

如果你只是想存几组配置、不强依赖 Windows 原生 INI 格式,真没必要绑死 PInvoke

  • File.ReadLines + 正则手动解析:适合只读、结构简单、且需要跨平台的场景;缺点是没法原子写入、不支持注释保留
  • 引入第三方包如 IniParser(NuGet):能处理 UTF-8、注释、空行,还支持对象映射;但它内部仍是文本解析,不是调用系统 API
  • 改用 appsettings.json:.NET Core/5+ 默认配置机制,热重载、类型安全、环境隔离都现成;唯一代价是得说服协作方接受格式变更

真正绕不开原生 INI 的情况,基本只剩对接老系统、硬件 SDK 或客户强制要求 INI 文件名+格式的交付场景。其他时候,花半小时改用 JSON,后面省下的排查时间远不止半小时。

相关专题

更多
c#是什么意思
c#是什么意思

C#是一种通用的面向对象编程语言,它在.NET框架上运行,可用于开发各种类型的应用程序。本专题为大家提供c#相关的各种文章、以及下载和课程。

2023.08.08

528

5

什么是c#
什么是c#

C#(读作C Sharp)是一种现代的、通用的、面向对象的编程语言。它由微软公司开发,于2000年首次发布,主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是一种类型安全和托管的编程语言,它结合了C++的强大性能和C语言的简单易学特点,并引入了许多新的特性和概念,如委托、属性、泛型和异步编程等,以提高开发效率和代码可维护性。

2023.08.31

1180

3

C#中base关键字的用法
C#中base关键字的用法

在C#中,base关键字用于访问当前类的基类成员,这包括基类的字段、属性、方法、构造函数、索引器以及事件。想了解更多C#的相关内容,可以阅读本专题下面的文章。

2024.03.13

556

8

C#Task用法
C#Task用法

Task在C#中是用于表示异步操作的对象,它位于System.Threading.Tasks命名空间中。想了解更多C#中各种用法的相关内容,可以阅读本专题下面的文章。

2024.03.14

1051

11

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2026.02.03

148

18

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

2026.02.06

202

20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

2026.03.11

526

24

C# Unity游戏开发与ECS架构实践
C# Unity游戏开发与ECS架构实践

本专题聚焦 C# 在 Unity 游戏开发中的应用,系统讲解 ECS(Entity-Component-System)架构设计、游戏对象管理、性能优化与内存控制策略。通过实际游戏案例,帮助开发者构建高性能、结构清晰的游戏系统,提高游戏开发效率与运行性能。

2026.04.13

138

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RabbitMQ 教程手册
RabbitMQ 教程手册

共0课时 | 0人学习

Linux man-pages 项目
Linux man-pages 项目

共0课时 | 0人学习

C# 教程
C# 教程

共94课时 | 20.2万人学习