2010-11-01 112 views
10

我用下面的代碼來獲取特殊目錄獲取我的文檔在Delphi中的文件夾路徑

uses 
    ActiveX, ShlObj; 

{...} 

procedure TForm1.Button1Click(Sender: TObject); 
// Replace CSIDL_HISTORY with the constants below 
var 
    Allocator: IMalloc; 
    SpecialDir: PItemIdList; 
    FBuf: array[0..MAX_PATH] of Char; 
    PerDir: string; 
begin 
    if SHGetMalloc(Allocator) = NOERROR then 
    begin 
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_PERSONAL, SpecialDir); 
    SHGetPathFromIDList(SpecialDir, @FBuf[0]); 
    Allocator.Free(SpecialDir); 
    ShowMessage(string(FBuf)); 
    end; 
end; 

,現在我想找到我的文檔路徑 所以我用 mydocfolderpath:=字符串(FBuf)+' \文件',我認爲它運作良好 但我的疑問是這是所有的Windows PC(個人文件夾/文件)mydocuments路徑可以讓用戶改變這個結構,並使我的文件夾anywhare其他(如:c:\ documents) if用戶更改路徑給我一個正確的方法,我想知道什麼是mydocuments文件夾(我的文檔或文檔)的名稱

+0

請注意某些版本的Windows使用本地化的路徑名稱。除非您完全確定所運行的版本和語言,否則絕對不要使用英語或任何語言將「特殊」文件夾名稱添加爲字符串常量。它可能不是目標系統上的正確名稱。始終使用特定的CSIDL_或其更新的等價物之一。 – 2010-11-01 11:05:11

回答

15

CSIDL_PERSONAL My Documents文件夾:

CSIDL_PERSONAL FOLDERID_Documents 6.0版。 代表我的文檔桌面 項目的虛擬文件夾。這相當於 CSIDL_MYDOCUMENTS。

以前版本6.0。文件 系統目錄用於物理上 存儲用戶的公用存儲庫 文件。一個典型的路徑是 C:\ Documents and Settings \用戶名\我的 文檔。這應該是 區別於命名空間中的虛擬我的 Documents文件夾。要 訪問該虛擬文件夾,請使用 SHGetFolderLocation,它返回 ITEMIDLIST作爲虛擬位置, 或參考 管理文件系統。管理文件系統。

參見:http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx可用

15

如果您使用的是最近的德爾福(XE5或以上)的版本的所有CSIDL常量列表和說明,那麼你可以使用新的平臺無關的類。基本上包括System.IOUtils在您的uses然後使用TPath.GetDocumentsPath獲取文檔文件夾。

檢出Doc Wiki

相關問題