为什么没有保存ini文件?

时间:2013-12-19 06:28:43

标签: delphi unicode settings ini delphi-xe5

我正在尝试保存unicode字符串。我有我的:

Uses IniFiles;
const
SZ_APP_NAME;

Procedure TForm1.SaveSettings;
var
  _MemIniU: TMemIniFile;
  SettingsPath: string;
begin
  SettingsPath := GetHomePath + PathDelim + SZ_APP_NAME + PathDelim;
  _MemIniU := TMemIniFile.Create(ChangeFileExt(SettingsPath, 'Settings.ini'),
    TEncoding.UTF8);
  try
    if Form1.WindowState <> TWindowState.wsMaximized then
    begin
      _MemIniU.WriteInteger(SZ_APP_NAME, 'WindowLeft', Form1.Left);
      _MemIniU.WriteInteger(SZ_APP_NAME, 'WindowTop', Form1.Top);
      _MemIniU.WriteInteger(SZ_APP_NAME, 'WindowWidth', Form1.Width);
      _MemIniU.WriteInteger(SZ_APP_NAME, 'WindowHeight', Form1.Height);
      _MemIniU.WriteString(SZ_APP_NAME, 'UnicodeText', Edit1.Text);
    end;
  finally
    _MemIniU.Free;
  end;
end;

但是没有创建ini文件。我做错了什么? RAD Studio XE5。

2 个答案:

答案 0 :(得分:13)

您必须致电TMemIniFile.UpdateFile将信息保存到文件中。

文档非常清楚

  

TMemIniFile 缓冲对INI文件的所有更改。首次创建对象时,将读取一次INI文件。 INI文件中的数据存储在嵌套的字符串列表中。 INI文件中的每个部分占据最顶部字符串列表中的一个元素,并且其中的每个元素本身可以包含字符串列表。每个包含的字符串列表中的每个元素代表该部分中的一个键。读取数据后,对数据的任何更改都将存储在内存中。要将内存中的数据写回相关的INI文件,请调用 UpdateFile 方法。

DocWiki TMemIniFile

答案 1 :(得分:3)

我修改了你的代码。您可以在下面看到“ _MemIniU.UpdateFile; ”命令。

如果您不使用 UpdateFile 命令,则不会保存您所做的任何更改。

最好的问候

Uses IniFiles;
const
SZ_APP_NAME;

Procedure TForm1.SaveSettings;
var
  _MemIniU: TMemIniFile;
  SettingsPath: string;
begin
  SettingsPath := GetHomePath + PathDelim + SZ_APP_NAME + PathDelim;
  _MemIniU := TMemIniFile.Create(ChangeFileExt(SettingsPath, 'Settings.ini'),
    TEncoding.UTF8);
  try
    if Form1.WindowState <> TWindowState.wsMaximized then
    begin
      _MemIniU.WriteInteger(SZ_APP_NAME, 'WindowLeft', Form1.Left);
      _MemIniU.WriteInteger(SZ_APP_NAME, 'WindowTop', Form1.Top);
      _MemIniU.WriteInteger(SZ_APP_NAME, 'WindowWidth', Form1.Width);
      _MemIniU.WriteInteger(SZ_APP_NAME, 'WindowHeight', Form1.Height);
      _MemIniU.WriteString(SZ_APP_NAME, 'UnicodeText', Edit1.Text);
      _MemIniU.UpdateFile;
    end;
  finally
    _MemIniU.Free;
  end;
end;