我应该在哪里存储配置文件?

问题描述:

我需要通过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; 
+3

您希望设置为每个用户('CSIDL_APPDATA'),而不是每个计算机('CSIDL_COMMON_APPDATA')。 – 2013-02-22 19:41:43

+1

http://stackoverflow.com/q/6883779/62576 – 2013-02-22 19:48:55

+1

此外,肯在这里张贴对我有帮助:http://stackoverflow.com/questions/11222132/what-c​​auses-this-error-unable-to-write -to-应用程序文件的ini – RobertFrank 2013-02-23 00:50:09

CSIDL_COMMON_APPDATAdescribed as

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

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

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

如果你想存储在用户配置文件,那么你应该选择一个位置CSIDL_APPDATA下,described as配置:

,可作为应用程序特定数据的公共储存库

的文件系统目录。

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