2013-02-22 107 views
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; 
+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

回答

10

CSIDL_COMMON_APPDATAdescribed as

包含所有用戶的應用程序數據的文件系統目錄。

因爲它是在計算機上的所有用戶之間共享的,所以您需要具有管理員權限才能寫入該位置。如果你希望你的配置被所有用戶共享,那麼CSIDL_COMMON_APPDATA是適合它的地方。但是,當你來寫作時,你需要確保你有足夠的權利。

如果您確實需要將應用程序寫入CSIDL_COMMON_APPDATA,那麼常規方法是在安裝過程中爲您的應用程序創建一個目錄。因爲你的安裝程序會運行提升它可以做到這一點。它還必須在新目錄中添加一個允許的ACL,以便您的應用程序可以稍後在以標準用戶身份運行時寫入該文件夾。

如果你想存儲在用戶配置文件,那麼你應該選擇一個位置CSIDL_APPDATA下,described as配置:

,可作爲應用程序特定數據的公共儲存庫

的文件系統目錄。

因爲這是在用戶配置文件中,機器上的每個用戶都將擁有配置文件的單獨副本。

相關問題