2010-11-01 4 views
10

i utilise le code suivant pour obtenir des répertoires spéciauxGet Mes documents chemin du dossier dans 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; 

Et maintenant je veux obtenir le chemin de mes documents donc j'utilise mydocfolderpath: = string (FBUF) + ' \ Documents 'et je pense que cela fonctionne bien mais mon doute est-ce le chemin mydocuments sur tous les PC Windows (personalfolder/documents) peut changer cette structure de l'utilisateur et rendre mon dossier de documents anywhare else (par exemple: c: \ documents) si l'utilisateur un changement le chemin me donner une bonne façon et j'aime savoir quel est le nom du dossier mydocuments (Mes Documents ou Documents)

+0

Sachez que certaines versions de Windows utilisent localisé les noms de chemin. À moins d'être absolument certain de la version et de la langue utilisées, n'ajoutez jamais de nom de dossier «spécial» en tant que chaîne de caractères en anglais ou dans une autre langue. Ce n'est peut-être pas le bon nom sur le système cible. Utilisez toujours l'un des CSIDL_ spécifiques ou leur équivalent récent. –

Répondre

15

CSIDL_PERSONAL est le dossier Mes Documents:

FOLDERID_Documents CSIDL_PERSONAL Version 6.0. Le dossier virtuel représente l'élément Mes documents Bureau . Ceci est équivalent à CSIDL_MYDOCUMENTS.

Avant la version 6.0. Le fichier répertoire système utilisé pour physiquement stocke le référentiel commun d'un utilisateur de documents. Un chemin type est C: \ Documents and Settings \ nom_utilisateur \ Mes documents . Cela doit être distingué du dossier Mes documents virtuel dans l'espace de noms. Pour accéder à ce dossier virtuel, utilisez SHGetFolderLocation, qui renvoie le ITEMIDLIST pour l'emplacement virtuel, ou se référer à la technique décrite dans Gestion du système de fichiers. Gestion du système de fichiers.

Voir: http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx pour obtenir une liste et une description de toutes les constantes CSIDL disponibles

15

Si vous utilisez une version récente de Delphi (XE5 ou plus), vous pouvez utiliser les nouvelles classes agnostique de la plate-forme. Fondamentalement inclure System.IOUtils dans votre uses puis utilisez TPath.GetDocumentsPath pour obtenir le dossier de documents.

Vérifiez la Doc Wiki

Questions connexes