2013-12-19 37 views
0

我想保存unicode字符串。有我有:为什么ini文件没有被保存?

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。

回答

12

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

文档是到

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

DocWiki TMemIniFile

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; 
相关问题