3

我需要通过Win8在WinXP中读写一个配置文件到windows磁盘。他们在哪里做这件事的最佳地点?ProgramData 文件夹似乎不允许

procedure TfrmMain.FormCreate(Sender: TObject);
var
  path: array[0..MAX_PATH] of char;
begin
   SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, @path);
  AppPath:= Path;
  AppPath:= AppPath + '\Customer\';
  if not DirectoryExists(AppPath) then
   CreateDir(AppPath);
 if FileExists(AppPath + 'Customers.cst') then
 LoadFromFile(AppPath + 'Customers.cst');
end;

procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if ListModified  then
 begin
  if MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo], 0) = mrYes  then
   SaveToFile(AppPath + 'Customers.cst');
  canClose:= True;
 end
 else 
canClose:= False;
end;
4

1 回答 1

10

CSIDL_COMMON_APPDATA描述为

包含所有用户的应用程序数据的文件系统目录。

因为它在计算机上的所有用户之间共享,所以您需要具有管理员权限才能写入该位置。如果您希望所有用户共享您的配置,那么CSIDL_COMMON_APPDATA它就是合适的地方。但是,当您来那里写作时,您需要确保您有足够的权利。

如果您确实需要写入应用程序,CSIDL_COMMON_APPDATA那么通常的方法是在安装期间为您的应用程序创建一个目录。因为您的安装程序将运行提升它可以做到这一点。它还必须向新目录添加一个许可 ACL,以便您的应用程序以后可以在以标准用户身份运行时写入该文件夹。

如果您想要一个存储在用户配置文件中的配置,那么您应该在 下选择一个位置CSIDL_APPDATA描述为

用作特定于应用程序数据的公共存储库的文件系统目录。

因为这是在用户配置文件中,所以机器上的每个用户都将拥有一个单独的配置文件副本。

于 2013-02-22T20:47:34.630 回答