-1

当 Value 是带引号的字符串时,会自动删除引号 (")。

这意味着,下面的两个语句, A.WriteString('Section','Key','"abcde"')A.WriteString('Section','Key','abcde') 没有什么不同。

请看我的代码(很清楚):

program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, IniFiles, sysutils
  { you can add units after this };

var
  List: TIniFile;
  A, B: String;

begin
  List := TIniFile.Create('file.ini');
  A := '"abcde"';
  List.WriteString('Section', 'Key', A);
  List.Free;

  List := TIniFile.Create('file.ini');
  B := List.ReadString('Section', 'Key', '');
  List.Free;

  if A<>B then raise Exception.Create(Format('A<>B (A=[%s] but B=[%s])', [A, B]));
end.

前面的代码引发以下异常:A<>B (A=["abcde"] but B=[abcde])

我想编写这样的代码:A.WriteString('Section', 'Key', List.CommaText);因为List.CommaText可能是带引号的字符串,所以我没有解决上述代码的方法。

是错误还是功能?如何将 a 保存TStrings到 a 中TIniFile

4

2 回答 2

1

在写之前,用别的东西改变引号(如果有的话),保证不会出现在字符串中。阅读后,将其改回引号。例如:

begin
  List := TIniFile.Create('file.ini');
  A := '"abcde"';
  List.WriteString('Section', 'Key', ReplaceStr(A, '"', #1));
  List.Free;

  List := TIniFile.Create('file.ini');
  B := ReplaceStr(List.ReadString('Section', 'Key', ''), #1, '"');
  List.Free;

  if A<>B then raise Exception.Create(Format('A<>B (A=[%s] but B=[%s])', [A, B]));
end.
于 2014-11-17T15:46:47.940 回答
0

太努力了,找不到答案。

TCustomIniFile.StripQuotes

http://www.freepascal.org/docs-html/fcl/inifiles/tcustominifile.stripquotes.html

于 2014-11-19T02:32:14.260 回答