Laileb.IniFile
2.0.3
dotnet add package Laileb.IniFile --version 2.0.3
NuGet\Install-Package Laileb.IniFile -Version 2.0.3
<PackageReference Include="Laileb.IniFile" Version="2.0.3" />
<PackageVersion Include="Laileb.IniFile" Version="2.0.3" />
<PackageReference Include="Laileb.IniFile" />
paket add Laileb.IniFile --version 2.0.3
#r "nuget: Laileb.IniFile, 2.0.3"
#:package Laileb.IniFile@2.0.3
#addin nuget:?package=Laileb.IniFile&version=2.0.3
#tool nuget:?package=Laileb.IniFile&version=2.0.3
๐พ 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.3" />
๐ก 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.
๐ 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.
๐ข ReadInt
public int ReadInt(string key, string? section = null, int defaultValue = -1)
Returns the integer value for the key, or defaultValue if not found or not a valid integer.
โ
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.
๐ 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.
๐งน DeleteSection
public bool DeleteSection(string? section = null)
Removes an entire section. Returns true on success.
๐ KeyExists
public bool KeyExists(string key, string? section = null)
Returns true if the key exists in the section (including keys with empty values).
๐งช 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.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.3 | 82 | 3/27/2026 |