在我的应用程序中,我在每台计算机上的应用程序文件夹中存储一些文件。
真实案例的简化版本是这样的:
..\Project1\LoginHistory (login history file - common for all users)
..\Project1\Translations (localization files - common for all users)
..\Project1\FormSettings\User1\ (this contains an ini file per form for User1)
..\Project1\FormSettings\UserN\ (this contains an ini file per form for UserN)
所以你可以明白我为什么使用它:保存一些特定于机器的数据(记住从这台机器进行的最新登录,一种 MRU),存储翻译字符串或第 3 方组件(这些是从 exe 运行时提取的)资源)并保存一些用户特定的数据(如表单大小)。真实情况更复杂,但至少你可以知道有一些“公共文件夹”和一些“用户文件夹”。
现在我想保留这个结构,所以我的所有文件都放在一个 ..\Project1 文件夹(+子文件夹)中。即使用户不是Windows用户,而是SQL Server用户。
我的问题是选择哪个文件夹..\
.
目前我(成功)使用此代码来检索..\
uses ShlObj;
function GetSpecialFolder(const CSIDL: integer) : string;
var
RecPath : PWideChar;
begin
RecPath := StrAlloc(MAX_PATH);
try
FillChar(RecPath^, MAX_PATH, 0);
if SHGetSpecialFolderPath(0, RecPath, CSIDL, false)
then result := RecPath
else result := '';
finally
StrDispose(RecPath);
end;
end;
我称之为
GetSpecialFolder(CSIDL_APPDATA)
CDISL列表定义的地方here http://msdn.microsoft.com/en-us/library/bb762494%28v=vs.85%29.aspx.
GetSpecialFolder(CSIDL_APPDATA)
回报C:\Users\username\AppData\Roaming
在 Windows 7 中。
所以这曾经是有效的,但最近我收到了一些来自一些海关的投诉,这些投诉似乎与这些文件夹中的读/写问题直接相关。 (例如C:\Users\username\AppData\Roaming\Project1\LoginHistory
- 使用上面列出的文件夹)。
所以我的问题是:使用是否正确CSIDL_APPDATA
?您还有其他建议吗?在某些操作系统上或某些权限确实降低的用户是否有可能在该文件夹上出现读/写问题?
请记住,我不希望我的文件有多个根文件夹。