如何从INI读取ASCII控制字符

时间:2013-07-22 08:56:37

标签: c# .net winforms ascii ini

我正在调用以下本机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)时,read函数只返回一个空字符串。编写控制字符非常有效。

通常情况下,我只是避免使用本机API读取/写入INI或更好,避免完全使用ini文件,但这是一个非常古老的遗留应用程序我正在修复,所以我需要获得此功能以目前的形式工作。

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

1 个答案:

答案 0 :(得分: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);