2010-11-01 10 views
10

Io uso il seguente codice per ottenere directory specialiGet My Documents percorso della cartella in 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; 

e ora voglio per ottenere il percorso miei documenti così io uso mydocfolderpath: = string (FBuf) + ' \ Documenti 'e penso che funzioni bene ma il mio dubbio è questo il percorso mydocuments su tutti i PC Windows (personalfolder/documenti) l'utente può cambiare questa struttura e rendere la mia cartella documenti anywhare else (es: c: \ documenti) se l'utente cambia il percorso mi dà un modo corretto e mi piace sapere qual è il nome della cartella mydocuments (Documenti o Documenti)

+0

Essere consapevoli del fatto che alcune versione di Windows utilizzare localizzato nomi di percorso. A meno che tu non sia completamente sicuro di quale versione e lingua stai utilizzando, non aggiungere mai un nome di cartella "speciale" come costante di una stringa in inglese o in qualsiasi lingua. Potrebbe non essere il nome corretto sul sistema di destinazione. Utilizza sempre uno dei CSIDL_ specifici o il loro equivalente più recente. –

risposta

15

CSIDL_PERSONAL è la cartella Documenti:

FOLDERID_Documents CSIDL_PERSONAL versione 6.0. La cartella virtuale che rappresenta l'elemento desktop My Documents. Questo è equivalente a CSIDL_MYDOCUMENTS.

Precedente versione 6.0. La directory di sistema utilizzata per fisicamente memorizza un archivio comune di un utente di documenti. Un percorso tipico è C: \ Documents and Settings \ nomeutente \ I miei documenti . Deve essere distinto dalla cartella virtuale My Documenti nello spazio dei nomi. Per accedere a tale cartella virtuale, utilizzare SHGetFolderLocation, che restituisce ITEMIDLIST per la posizione virtuale, o fare riferimento alla tecnica descritta in Gestione del file system.Gestione del file system.

See: http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx per un elenco e la descrizione di tutte le costanti CSIDL disponibili

15

Se si utilizza una versione recente di Delphi (XE5 o superiore), allora è possibile utilizzare le nuove classi agnostico piattaforma. Fondamentalmente includere System.IOUtils nel tuo uses quindi utilizzare TPath.GetDocumentsPath per ottenere la cartella documenti.

Scopri i Doc Wiki