如果我用這個Delphi代碼如何使用Delphi獲取INI文件的絕對路徑?
with TIniFile.Create('myapp.ini') do
try
WriteString('SETTINGS', 'key', 'value');
finally
Free;
end;
在默認的文件夾中創建一個INI文件,有沒有辦法來檢索它由Windows用來創建該文件的絕對路徑?
如果我用這個Delphi代碼如何使用Delphi獲取INI文件的絕對路徑?
with TIniFile.Create('myapp.ini') do
try
WriteString('SETTINGS', 'key', 'value');
finally
Free;
end;
在默認的文件夾中創建一個INI文件,有沒有辦法來檢索它由Windows用來創建該文件的絕對路徑?
在後臺,TInifile.WriteString
使用WritePrivateProfileString
函數。
從文檔(重點煤礦):
BOOL WINAPI WritePrivateProfileString( _In_ LPCTSTR lpAppName, _In_ LPCTSTR lpKeyName, _In_ LPCTSTR lpString, _In_ LPCTSTR lpFileName);
lpAppName
[IN]到的字符串將被複制的部分的名稱。如果 部分不存在,則會創建該部分。該部分的名稱是 與個案無關;字符串可以是大寫和小寫字母的任意組合。
lpKeyName
[in]與字符串關聯的密鑰名稱 。如果指定部分中不存在密鑰,則創建它 。如果此參數爲NULL,則刪除整個部分(包括 部分中的所有條目)。
lpString
[in]要寫入文件的空終止字符串。如果 該參數爲NULL,則刪除由lpKeyName參數 指向的鍵。
lpFileName
[in]初始化文件的名稱。如果文件是使用Unicode字符創建的 ,則該函數會將Unicode 字符寫入文件。否則,該函數將寫入ANSI 字符。如果lpFileName參數不包含該文件的完整路徑和文件名,則WritePrivateProfileString將在Windows的 目錄中搜索該文件。如果該文件不存在,則此功能 將在Windows目錄中創建該文件。
這最後一條評論意味着您的程序必須以管理員身份運行。邏輯結果是,如果您的程序未以管理員身份運行,則默認路徑爲C:\Users\Windows username\AppData\Local\VirtualStore\Windows
。 因此,要遵守現代Windows規則,最好的做法是爲ini文件提供完整路徑...
'這最後的評論意味着您的程序必須以管理員身份運行 - 除非應用程序運行在例如映射(某些)文件到虛擬Windows目錄 – mjn
@mjn的終端服務環境中,請參閱我最近的更新 – whosrdaddy
爲什麼不將默認路徑設置爲與應用程序路徑相同?例如使用'TIniFile.Create(changefilext(paramstr(0),'.ini'))'將你的ini文件放在與你的可執行文件相同的文件夾中。 – theodorusap
@theodorusap並打破有關UAC的每個規則? – whosrdaddy
你一定這樣做是錯誤的。您必須停止將文件放入Windows目錄或依靠虛擬化。事實上,你真的應該停止使用長期棄用的Win16反向compat API。不要問什麼是完整的路徑,提供完整的路徑。並切換到'TMemIniFile'。 –