TIniFileにクオートを含む文字列を与えるときの注意点
|
APIのGetPrivateProfileStringの仕様として、値文字列の両端がクォート( " or ' )で囲まれていると、これを外してから返すことになっています。
これは、次のような問題を引き起こしかねません。
[Iniファイルの内容]
SomeItem="a bd","de fg","h ijk"
これをTIniFileを使って読み出すと、結果は、
Result='a bd","de fg","h ijk';
となって、両端のクォートだけが取り払われ、おかしなことになってしまいます。
これは、特に、TStringList.CommaTextをTInifileを使って読み書きするときに注意すべき点です。
これを防ぐには、クォートで括られた文字列群をさらに一段、クォートで囲ってしまいます。
[Iniファイルの内容]
SomeItem=""a bd","de fg","h ijk""
これをTIniFileを使って読み出すと、結果は、
Result='"a bd","de fg","h ijk"';
となって、OKです。
コード的には、
IniFile.WriteString('TEST', 'ZZZ', TmpLst.CommaText);
を
IniFile.WriteString('TEST', 'ZZZ', '"'+TmpLst.CommaText+'"');
とします。
ちなみに、TRegIniFileを使う場合には、このようなことは起こりません。 |
|