如何使用 GetPrivateProfileStringW 从 .ini 文件读取值

How to read values from .ini file with GetPrivateProfileStringW

我想从我的 ini 文件中获取数据,如下所示:

[UI]
visibility=hidden
size=medium

使用以下代码:

string section = "UI";
string key = "size";
string defaultValue "-";

string value = GetValueFromIni(section, key, defaultValue);

-----------------------------------------------------------------

this.filePath = @"C:\Users[=11=]372\test.ini";

public string GetValueFromIni(string section, string key, string defaultValue = "")
{
    string value = string.Empty;
    int i = GetPrivateProfileStringW(section, key, defaultValue, value, 255, this.filePath);
    return value ?? defaultValue;
}

[DllImport("kernel32")]
private static extern int GetPrivateProfileStringW(string section, string key, string defaultValue, string value, int size, string filePath);

但是不行。

我总是得到默认值。

有人知道解决这个问题的方法吗?

干杯

至少,你的p/invoke签名是错误的。

lpReturnedString 是指向应写入结果的缓冲区的指针。 C# 字符串是不可变的,因此编组器不会改变您的 value 变量。相反,您应该使用 StringBuilder:

[DllImport("kernel32")]
private static extern int GetPrivateProfileString(
    string section,
    string key,
    string defaultValue,
    StringBuilder value,
    int size,
    string filePath);

用例如

调用它
var value = new StringBuilder(255);
int ret = GetPrivateProfileString(section, key, defaultValue, value, value.Capacity, this.filePath);
// TODO: Check 'ret'
return value.ToString();

总是值得检查 http://pinvoke.net 来寻找灵感,尽管对那里的签名持保留态度。

我还没有用你的输入测试过这个,所以我不能保证它有效。如果其他人提出了完整的解决方案,请接受他们的回答而不是我的。