gpt4 book ai didi

c# - 读取/写入 INI 文件

转载 作者:IT王子 更新时间:2023-10-29 03:28:55 24 4
gpt4 key购买 nike

.NET Framework 中是否有可以读/写标准.ini 文件的类:

[Section]
<keyname>=<value>
...

Delphi 有TIniFile 组件,我想知道C# 是否有类似的组件?

最佳答案

前言

首先,阅读这篇关于 the limitations of INI files 的 MSDN 博客文章.如果它适合您的需要,请继续阅读。

这是我使用原始 Windows P/Invoke 编写的简洁实现,因此安装了 .NET 的所有 Windows 版本(即 Windows 98 - Windows 11)都支持它。我特此将其发布到公共(public)领域 - 您可以在不注明出处的情况下免费将其用于商业用途。

微型类

在您的项目中添加一个名为 IniFile.cs 的新类:

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

// Change this to match your program's normal namespace
namespace MyProg
{
class IniFile // revision 11
{
string Path;
string EXE = Assembly.GetExecutingAssembly().GetName().Name;

[DllImport("kernel32", CharSet = CharSet.Unicode)]
static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath);

[DllImport("kernel32", CharSet = CharSet.Unicode)]
static extern int GetPrivateProfileString(string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath);

public IniFile(string IniPath = null)
{
Path = new FileInfo(IniPath ?? EXE + ".ini").FullName;
}

public string Read(string Key, string Section = null)
{
var RetVal = new StringBuilder(255);
GetPrivateProfileString(Section ?? EXE, Key, "", RetVal, 255, Path);
return RetVal.ToString();
}

public void Write(string Key, string Value, string Section = null)
{
WritePrivateProfileString(Section ?? EXE, Key, Value, Path);
}

public void DeleteKey(string Key, string Section = null)
{
Write(Key, null, Section ?? EXE);
}

public void DeleteSection(string Section = null)
{
Write(null, null, Section ?? EXE);
}

public bool KeyExists(string Key, string Section = null)
{
return Read(Key, Section).Length > 0;
}
}
}

如何使用

用以下3种方式之一打开INI文件:

// Creates or loads an INI file in the same directory as your executable
// named EXE.ini (where EXE is the name of your executable)
var MyIni = new IniFile();

// Or specify a specific name in the current dir
var MyIni = new IniFile("Settings.ini");

// Or specify a specific name in a specific dir
var MyIni = new IniFile(@"C:\Settings.ini");

你可以像这样写一些值:

MyIni.Write("DefaultVolume", "100");
MyIni.Write("HomePage", "http://www.google.com");

创建这样的文件:

[MyProg]
DefaultVolume=100
HomePage=http://www.google.com

从 INI 文件中读取值:

var DefaultVolume = MyIni.Read("DefaultVolume");
var HomePage = MyIni.Read("HomePage");

可选地,您可以设置[Section]的:

MyIni.Write("DefaultVolume", "100", "Audio");
MyIni.Write("HomePage", "http://www.google.com", "Web");

创建这样的文件:

[Audio]
DefaultVolume=100

[Web]
HomePage=http://www.google.com

您还可以像这样检查 key 是否存在:

if(!MyIni.KeyExists("DefaultVolume", "Audio"))
{
MyIni.Write("DefaultVolume", "100", "Audio");
}

您可以像这样删除一个键:

MyIni.DeleteKey("DefaultVolume", "Audio");

您也可以像这样删除整个部分(包括所有键):

MyIni.DeleteSection("Web");

如有任何改进,请随时发表评论!

关于c# - 读取/写入 INI 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/217902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com