(Delphi 2006)爲了在應用程序啓動期間創建另一個文件夾,我正在獲取Common documents文件夾。這一直工作正常 - 它總是返回:GetSystemPath或SHGetSpecialFolderPath - 我該用於CommonDocs文件夾?
C:\Documents and Settings\All Users\Documents\
不過我已經收到了來自包括啓動日誌顯示應用西班牙用戶bug報告試圖創建:
MyApp\
而不是:
C:\Documents and Settings\All Users\Documents\MyApp\
即公共文檔文件夾字符串是空的。得到這個代碼是:
function GetCommonDocumentsFolder : TFilename ;
begin
Result := GetSystemPath (CSIDL_COMMON_DOCUMENTS) ;
end ;
我也注意到在我這個問題的研發,有也是一個系統調用:
SHGetSpecialFolderPath
哪一個我應該使用? GetSystemPath(CSIDL_COMMON_DOCUMENTS)已爲我工作(至少在英語區域設置Windows XP)。
所以2個問題確實,可能與:
- 爲什麼GetSystemPath(CSIDL_COMMON_DOCUMENTS)返回NULL?
- 我應該實際上使用SHGetSpecialFolderPath嗎?
(男孩,這是一個很難找到的標籤)
來源爲神祕GetSystemPath:
function GetSystemPath (Folder: Integer) : TFilename ;
{ Call this function with one of the constants declared above. }
var
PIDL : PItemIDList ;
Path : LPSTR ;
AMalloc : IMalloc ;
begin
Path := StrAlloc (MAX_PATH) ;
SHGetSpecialFolderLocation (Application.Handle, Folder, PIDL) ;
if SHGetPathFromIDList (PIDL, Path) then
begin
Result := IncludeTrailingPathDelimiter (Path) ;
end
else
begin
Result := '' ;
end ; ;
SHGetMalloc(AMalloc) ;
AMalloc.Free (PIDL) ;
StrDispose (Path) ;
end;
因此,最終,您是問使用API函數還是調用不同API函數的庫函數。這並不重要 - 他們都做同樣的事情。你應該做的是檢查API函數的返回值,以便知道你是否有有效的路徑。你的庫函數無用地返回一個空字符串,而不是告訴你它不能完成你所要求的。 – 2011-03-10 04:07:42