不删除引号的GetPrivateProfileString

问题描述 投票:0回答:2

我有一个ini文件内容如下:

[Test]
Item="123","456"

我使用下面的代码来解析该值。

但是我发现它没有返回我期望的值。

似乎该功能会自动删除第一个和最后一个引号。

有什么办法可以解决这个问题吗?

StringBuilder stringBuilder = new StringBuilder(500);
WINAPI.GetPrivateProfileString("Test", "Item", "", stringBuilder,500, "D:\\Test.ini");
var _value = stringBuilder.ToString(0, stringBuilder.Length); //get 123","456 instead "123","456"
c# ini
2个回答
0
投票

只需在开头和结尾添加新的双引号即可。

[Test]
Item=""123","456","789","abc","def""

0
投票

你为什么使用 ini 文件以及为什么使用

GetPrivateProfileString

如果我读到这样的相关问题,即使是 2011 年的人似乎也试图远离它:GetPrivateProfileString 的目的是什么?

因此,也许您应该将应用程序配置存储在其他位置,例如 app.config 文件。但是,即使它在 ini 文件中,您也可以简单地使用自定义代码读取它:

public string? GetIniValue(string iniPath, string sectionName, string key)
{
    if (!File.Exists(iniPath))
    {
        return null;
    }

    return File.ReadLines(iniPath)
        .SkipWhile(l => !l.Equals($"[{sectionName}]", StringComparison.InvariantCultureIgnoreCase))
        .Skip(1) // skip header
        .TakeWhile(l => l.Contains('='))
        .FirstOrDefault(l => l.Contains(key, StringComparison.InvariantCultureIgnoreCase))?
        .Split('=').Last().Trim();
}

用途:

string testItemValue = GetIniValue(@"D:\\Test.ini", "Test", "Item");
© www.soinside.com 2019 - 2024. All rights reserved.