1

我正在调用以下本机 API 从 INI 文件中读取/写入

[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(    // INI Read
        String section,
        String key,
        String def,
        StringBuilder retVal,
        int size,
        String filePath);
[DllImport("kernel32.dll")]
private static extern long WritePrivateProfileString(  // INI Write
        String section,
        String key,
        String val,
        String filePath);

public string ReadIni(string sectionString, string keyString, string filePathString) 
{
    StringBuilder temp = new StringBuilder(200000);
    int i = GetPrivateProfileString(sectionString, keyString, "", temp, temp.Capacity, filePathString);
    return temp.ToString();
}

        // Write (Section, Key, Data, File Path)
public void WriteIni(
string sectionString, string keyString, string dataString, string filePathString) 
{
    WritePrivateProfileString(sectionString, keyString, dataString, filePathString);
}

读取/写入 ini 文件可以很好地与上面的代码配合使用。

当我尝试读取 ASCII 控制字符时,例如 0x02 (STX) 和 0x03 (ETX),读取函数只返回一个空字符串。编写控制字符效果很好。

通常,我只是避免使用本机 API 来读取/写入 INI 或更好,避免完全使用 ini 文件,但这是我正在修复的一个非常旧的遗留应用程序,因此我需要让这个函数在其中工作它目前的形式。

如何让 GetPrivateProfileString 读取 ASCII 控制字符?

4

1 回答 1

0

我认为写给ini有问题。您必须使用该代码写入 ini 文件:

//Writing to ini file

string pFileName = "test.ini"
string W_Text = "[" + pSection + "]" + Environment.NewLine +
                                 pKey + "=" + pDefValue;
System.IO.File.WriteAllText(pFileName, W_Text, Encoding.UTF8);

您可以从上面的代码中读取ini文件:

//Reading from ini file

pFileName="test.ini";
IniDocument W_Ini = new IniDocument(pFileName, IniFileType.WindowsStyle);
IConfigSource W_Source = new IniConfigSource(W_Ini);
return W_Source.Configs[pSection].Get(pKey);
于 2015-02-11T15:51:00.647 回答