【问题标题】:Why ini file is not being saved?为什么ini文件没有被保存?
【发布时间】:2014-01-07 14:45:34
【问题描述】:

我正在尝试保存 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。

【问题讨论】:

    标签: delphi unicode settings ini delphi-xe5


    【解决方案1】:

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

    文档很清楚

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

    DocWiki TMemIniFile

    【讨论】:

      【解决方案2】:

      我修改了你的代码。您可以看到下面有“_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;
      

      【讨论】:

        猜你喜欢
        • 2011-11-14
        • 1970-01-01
        • 2020-10-07
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 2011-01-09
        相关资源
        最近更新 更多