gpt4 book ai didi

delphi - 使用 SHGetSpecialFolderPath 检索非管理员用户也可以访问的应用程序文件夹,选择哪个 CSIDL?

转载 作者:行者123 更新时间:2023-12-03 14:53:49 27 4
gpt4 key购买 nike

在我的应用程序中,我在每台计算机上的应用程序文件夹中存储一些文件。

真实案例的简化版本是这样的:

..\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 资源的运行时)并保存一些用户特定的数据(如表单大小)。真实情况更复杂,但至少你可以知道有一些“公共(public)文件夹”和一些“用户文件夹”。

现在我想保留这个结构,所以我的所有文件都放在一个 ..\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 .

GetSpecialFolder(CSIDL_APPDATA) 在 Windows 7 中返回 C:\Users\username\AppData\Roaming

这曾经是有效的,但最近我收到了一些客户的投诉,这些投诉似乎与这些文件夹中的读/写问题直接相关。 (例如 C:\Users\username\AppData\Roaming\Project1\LoginHistory - 使用上面列出的文件夹)。

所以我的问题是:使用CSIDL_APPDATA是否正确?您还有其他建议吗?在某些操作系统上或某些权限确实降低的用户是否有可能在该文件夹上出现读/写问题?

请记住,我不希望我的文件有多个根文件夹。

最佳答案

我认为您想对非特定于用户的文件使用CSIDL_COMMON_APPDATA。如果您(在代码中)假设存储在 CSIDL_APPDATA 中的文件在用户之间共享,则这是不允许的。

关于delphi - 使用 SHGetSpecialFolderPath 检索非管理员用户也可以访问的应用程序文件夹,选择哪个 CSIDL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5089877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com