我正在调用以下本机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控制字符?
答案 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);