2

このアプリケーションは何年にもわたって進化してきたため、まだいくつかの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=この文の前後にある3つの末尾のスペースに注意してください。

次のように取得します(左右にトリミングされていることに注意してください。引用符は無視してください)。

「この文の前後にある3つの末尾のスペースに注意してください。」

トリムしたくない。それは私の手に負えないですか?INIファイルで等号の後にスペースを入れることはできません(例:SomeData =)?

4

2 に答える 2

2

コメントで指摘されているように、それがAPIの仕組みです。それで生活できる場合は、たとえばこのライブラリ/ラッパー(ソースを含み、1つのファイルのみを含む)を使用して、少なくともいくつかのDllImport作業を保存できます。

IniReader

于 2012-11-26T21:42:55.663 に答える
2

引用符を使用してコンテンツを表すことができます。コンテンツを文字列に読み込むときに、必要なコンテンツを簡単に解析できます。このように:key = "content"

関数IniReadValueにコードを追加できます。

または、次のように、base64文字列を使用してメッセージを配置/取得できます。some-key=your-content-in-base64-stringおよび多くのcharの問題は問題になりません。しかし、この方法は読むのに適していません。

于 2012-11-27T09:47:05.553 に答える