没有修剪的GetPrivateProfileString?

时间:2012-11-26 21:16:38

标签: c# string dllimport ini

由于这个应用程序已经发展多年,仍然有一些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 =)?

2 个答案:

答案 0 :(得分:1)

正如评论中所指出的,这就是API的工作原理。如果您能接受它,您至少可以通过使用此库/包装器(包括源,只有一个文件)来保存一些DllImport工作:

IniReader

答案 1 :(得分:1)

当您将内容读成字符串时,您可以使用引号来表达您的内容, 您可以轻松地解析所需的内容。 像这样: key =“content”

您可以在Function IniReadValue中添加一些代码。

或者您可以使用base64字符串来放置/获取消息,如下所示: some-key = your-content-in-base64-string 并且许多char问题都不是你的问题。 但这种方式不适合阅读。