由于这个应用程序已经发展多年,仍然有一些INI文件。我有一个使用GetPrivateProfileString读取条目的类。
在课程的顶部,我们看到了这一点:
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal,
int size, string filePath);
看起来有一个公共方法看起来像这样:
public string IniReadValue(string Section, string Key)
{
// If string greater than 254 characters (255th spot is null-terminator),
// string will be truncated.
const int capacity = 255;
StringBuilder temp = new StringBuilder(capacity);
int i = GetPrivateProfileString(Section, Key, "", temp,
capacity, this.m_Path);
return temp.ToString();
}
我最近注意到GetPrivateProfileString修剪了它的数据。因此,如果我的INI文件有这样的条目:
SomeData =注意这句话前后三个尾随空格。
它将检索它(注意它被修剪到左侧和右侧 - 忽略引号):
“注意这句话前后三个尾随空格。”
我不想要它修剪。这是我无法控制的吗?等号后,INI文件不允许有空格(例如SomeData =)?
答案 0 :(得分:1)
正如评论中所指出的,这就是API的工作原理。如果您能接受它,您至少可以通过使用此库/包装器(包括源,只有一个文件)来保存一些DllImport工作:
答案 1 :(得分:1)
当您将内容读成字符串时,您可以使用引号来表达您的内容, 您可以轻松地解析所需的内容。 像这样: key =“content”
您可以在Function IniReadValue中添加一些代码。
或者您可以使用base64字符串来放置/获取消息,如下所示: some-key = your-content-in-base64-string 并且许多char问题都不是你的问题。 但这种方式不适合阅读。