如果我用这个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'。 –