在我的應用程序中,我在每臺計算機上存儲應用程序文件夾中的一些文件。SHGetSpecialFolderPath用於檢索也可以訪問非管理員用戶的應用程序文件夾,CSIDL可以選擇哪個文件夾?
的實際情況的簡化版本是這樣的:
..\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),存儲轉換字符串或第三方組件(這些是從exe資源中提取運行時)以及用於保存某些用戶特定數據(如表單大小)。真實情況更爲複雜,但至少可以得到一些「常用文件夾」和一些「用戶文件夾」。
現在我想保持這種結構,所以我所有的文件在一個.. \ Project1文件夾(+子文件夾)中。即使因爲用戶不是Windows用戶,但他們是SQL Server用戶。
我的問題是要選擇哪個文件夾..\
。
目前我(成功地)使用此代碼爲retrieveing ..\
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)
回報C:\Users\username\AppData\Roaming
在Windows 7
所以這用來工作,但最近我收到一些客戶認爲似乎直接關係到閱讀這些文件夾/寫問題的一些投訴。 (例如C:\Users\username\AppData\Roaming\Project1\LoginHistory
- 使用上面列出的文件夾)。
所以我的問題是:是否正確使用CSIDL_APPDATA
?你有另外一個建議嗎?是否有可能在某些操作系統上或某些用戶的權限真正減少時,可能會在該文件夾上出現讀/寫問題?
請記住,我不想爲我的文件擁有多個根文件夾。
用戶必須能夠在那裏寫。否則整個系統就會崩潰。在編寫文件之前,您是否需要創建丟失的目錄?如果您不告訴我們錯誤代碼和消息,很難調試這個! – 2011-02-23 11:17:27
是的,如果用戶當然不能寫出整個想法不起作用。我無法重現這個問題,我只是被告知有人有這個問題,所以我試圖猜測是哪個原因。 Probabyl I將有機會進一步調查,但不是現在。這就是我問的原因。 – LaBracca 2011-02-23 14:18:41