Laileb.IniFile
2.0.4
dotnet add package Laileb.IniFile --version 2.0.4
NuGet\Install-Package Laileb.IniFile -Version 2.0.4
<PackageReference Include="Laileb.IniFile" Version="2.0.4" />
<PackageVersion Include="Laileb.IniFile" Version="2.0.4" />
<PackageReference Include="Laileb.IniFile" />
paket add Laileb.IniFile --version 2.0.4
#r "nuget: Laileb.IniFile, 2.0.4"
#:package Laileb.IniFile@2.0.4
#addin nuget:?package=Laileb.IniFile&version=2.0.4
#tool nuget:?package=Laileb.IniFile&version=2.0.4
๐พ IniFile
A lightweight .NET library for reading and writing Windows INI files via the native kernel32 API.
๐ Table of Contents
- ๐ About
- โจ Features
- ๐ Getting Started
- ๐ก Usage
- ๐ API Reference
- ๐งช Running Tests
- ๐๏ธ Project Structure
- ๐ค Contributing
- ๐ License
๐ About
IniFile is a thin, zero-dependency wrapper around the Windows kernel32.dll Private Profile functions (WritePrivateProfileString, GetPrivateProfileString, GetPrivateProfileInt, etc.).
It lets you read and write classic INI configuration files with a simple, strongly-typed C# API โ no parsing logic needed.
โ ๏ธ Note: This library uses Windows-only P/Invoke calls and is not cross-platform.
โจ Features
| Method | Description |
|---|---|
Write |
โ๏ธ Write a string value to a key in a given section |
ReadString |
๐ Read a string value (with optional default) |
ReadInt |
๐ข Read an integer value (with optional default) |
ReadBool |
โ
Read a boolean โ supports true/false, 1/0, yes/no |
GetAllSections |
๐ List all section names in the file |
GetAllDataSection |
๐ List all key=value pairs in a section |
DeleteKey |
๐๏ธ Remove a specific key from a section |
DeleteSection |
๐งน Remove an entire section and its keys |
KeyExists |
๐ Check whether a key exists in a section |
๐ Getting Started
๐ Prerequisites
- OS: Windows 10 / 11 or Windows Server 2016+
- SDK: .NET 10 SDK or later
- Language: C# 14
๐ฆ Installation
NuGet Package Manager
dotnet add package Laileb.IniFile
Or via the Package Manager Console in Visual Studio:
Install-Package Laileb.IniFile
Or add directly to your .csproj:
<PackageReference Include="Laileb.IniFile" Version="2.0.4" />
๐ก Make sure to enable
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>in your.csproj(required byLibraryImportsource generation).
๐ก Usage
using Ini = IniFile.IniFile;
var ini = new Ini("config.ini");
// Write values
ini.Write("Host", "localhost", "Database");
ini.Write("Port", "5432", "Database");
ini.Write("Debug", "true", "Logging");
// Read values
string host = ini.ReadString("Host", "Database"); // "localhost"
int port = ini.ReadInt("Port", "Database"); // 5432
bool dbg = ini.ReadBool("Debug", "Logging"); // true
string miss = ini.ReadString("Missing", "Nope", defaultValue: "N/A"); // "N/A"
// Enumerate
string[] sections = ini.GetAllSections(); // ["Database", "Logging"]
string[] entries = ini.GetAllDataSection("Database"); // ["Host=localhost", "Port=5432"]
// Check & delete
bool exists = ini.KeyExists("Host", "Database"); // true
ini.DeleteKey("Host", "Database");
ini.DeleteSection("Logging");
๐ See the full working demo in examples/IniFile.Example/Program.cs.
๐ API Reference
๐จ Constructor
public IniFile(string filePath)
Creates a new instance bound to the given file path. The path is resolved to an absolute path internally. Throws ArgumentException if the path is null, empty, or whitespace.
๐ท๏ธ Properties
| Property | Type | Description |
|---|---|---|
FilePath |
string |
The fully-qualified path to the INI file. |
โ๏ธ Methods
โ๏ธ Write
public bool Write(string key, string? value, string? section = null)
Writes a string value. Returns true on success. Creates the file, section, and key if they don't exist. When section is omitted or null, the wrapper uses an empty section name, which Windows serializes as [].
๐ ReadString
public string ReadString(string? key, string? section = null, string defaultValue = "", int bufferSize = 1024)
Returns the value for the key, or defaultValue if not found. When section is omitted or null, key reads use an empty section name, which Windows serializes as []. Passing null for key preserves the native enumeration behavior: key names for a section, or section names when both key and section are null.
๐ข ReadInt
public int ReadInt(string key, string? section = null, int defaultValue = -1)
Returns the integer value for the key, or defaultValue if the key is not found. Malformed numeric values follow the native GetPrivateProfileInt parsing behavior and may return 0 instead of defaultValue. When section is omitted or null, the wrapper uses an empty section name, which Windows serializes as [].
โ
ReadBool
public bool ReadBool(string key, string? section = null, bool defaultValue = false)
Returns true for "true", "1", "yes"; false for "false", "0", "no" (case-insensitive). Returns defaultValue for anything else. When section is omitted or null, the wrapper uses an empty section name, which Windows serializes as [].
๐ GetAllSections
public string[] GetAllSections(int bufferSize = 32768)
Returns an array of all section names. Returns an empty array if the file has no sections.
๐ GetAllDataSection
public string[] GetAllDataSection(string section, int bufferSize = 32768)
Returns an array of "key=value" strings for every entry in the given section.
๐๏ธ DeleteKey
public bool DeleteKey(string key, string? section = null)
Removes a key and its value. Returns true on success. When section is omitted or null, the wrapper uses an empty section name, which Windows serializes as [].
๐งน DeleteSection
public bool DeleteSection(string? section = null)
Removes an entire section. Returns true on success. When section is omitted or null, the wrapper deletes the empty [] section.
๐ KeyExists
public bool KeyExists(string key, string? section = null)
Returns true if the key exists in the section (including keys with empty values). When section is omitted or null, the wrapper uses an empty section name, which Windows serializes as [].
๐งช Running Tests
dotnet test
Tests are located in tests/IniFile.Tests/ and use xUnit. They create temporary INI files in the system temp directory and clean up after each run.
๐๏ธ Project Structure
IniFile/
โโโ ๐ src/
โ โโโ ๐ IniFile/ # Library source
โ โโโ ๐ IniFile.cs
โ โโโ ๐ IniFile.csproj
โโโ ๐ tests/
โ โโโ ๐ IniFile.Tests/ # xUnit tests
โ โโโ ๐ IniFileTests.cs
โ โโโ ๐ IniFile.Tests.csproj
โโโ ๐ examples/
โ โโโ ๐ IniFile.Example/ # Console demo app
โ โโโ ๐ Program.cs
โ โโโ ๐ IniFile.Example.csproj
โโโ ๐ Directory.Build.props # Shared build settings
โโโ ๐ Directory.Packages.props # Central package management
โโโ ๐ IniFile.slnx # Solution file
โโโ ๐ README.md
๐ค Contributing
Contributions are welcome! To get started:
- ๐ด Fork the repository
- ๐ฟ Create a feature branch (
git checkout -b feature/my-feature) - โ๏ธ Make your changes and add tests
- โ
Run
dotnet testto verify everything passes - ๐ฌ Open a Pull Request
๐ License
This project is licensed under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.