我正在尝试保存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。
答案 0 :(得分:13)
您必须致电TMemIniFile.UpdateFile
将信息保存到文件中。
文档非常清楚
TMemIniFile 缓冲对INI文件的所有更改。首次创建对象时,将读取一次INI文件。 INI文件中的数据存储在嵌套的字符串列表中。 INI文件中的每个部分占据最顶部字符串列表中的一个元素,并且其中的每个元素本身可以包含字符串列表。每个包含的字符串列表中的每个元素代表该部分中的一个键。读取数据后,对数据的任何更改都将存储在内存中。要将内存中的数据写回相关的INI文件,请调用 UpdateFile 方法。
答案 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;