2013-12-19 61 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; 
相關問題