首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 取得系統特殊資料夾路徑:SHGetSpecialFolderLocation 與 SHGetPathFromIDList 完整應用指南

     編輯:Delphi

核心 API 介紹

  • SHGetSpecialFolderLocation:取得特殊資料夾的 PIDL (Item ID List)
  • SHGetPathFromIDList:將 PIDL 轉換為檔案系統路徑
  • 兩者皆定義於 ShlObj 單元

封裝函數:簡化呼叫


function GetPath(FID: Integer): string;
var
  PIDL: PItemIDList;
  Path: array[0..MAX_PATH] of Char;
begin
  SHGetSpecialFolderLocation(0, FID, PIDL);
  SHGetPathFromIDList(PIDL, Path);
  Result := Path;
end;

常用 CSIDL 常數對照表

範例程式定義 58 個常數,涵蓋桌面、我的文件、程式檔、系統目錄、網路芳鄰等:

常數十六進位說明
CSIDL_DESKTOP$0000桌面
CSIDL_PERSONAL$0005我的文件
CSIDL_PROGRAM_FILES$0026Program Files
CSIDL_WINDOWS$0024Windows 目錄
CSIDL_SYSTEM$0025System32
CSIDL_APPDATA$001A應用程式資料 (Roaming)
CSIDL_LOCAL_APPDATA$001C本機應用程式資料 (Local)
CSIDL_COMMON_APPDATA$0023所有使用者應用程式資料
CSIDL_STARTUP$0007啟動資料夾
CSIDL_FONTS$0014字型資料夾

完整掃描測試程式


procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
  S: string;
begin
  Memo1.Clear;
  for I := 0 to Length(Arr) - 1 do begin
    S := GetPath(Arr[I]);
    if S <> '' then
      Memo1.Lines.Add(Format('%d:'#9'%s', [Arr[I], S]));
  end;
end;

執行結果示意

特殊資料夾路徑掃描結果

現代替代方案:KnownFolder API

Windows Vista+ 建議使用 SHGetKnownFolderPath (搭配 KNOWNFOLDERID GUID),支援更多資料夾且不受 MAX_PATH 限制。Delphi 可透過 Winapi.ShlObj 使用。

總結

掌握 SHGetSpecialFolderLocation + SHGetPathFromIDList 組合,能可靠取得跨版本、跨使用者、跨語系的系統特殊路徑,是 Delphi 開發安裝程式、設定檔管理、資料儲存的基礎技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved