logo
Sommaire > Gestion des fichiers > Répertoire
        Comment connaître le répertoire de mon application ?
        Comment créer un répertoire ?
        Comment créer une arborescence de répertoires ?
        Comment supprimer un répertoire ?
        Comment renommer un répertoire?
        Comment tester si un répertoire existe ?
        Comment ouvrir la boîte de dialogue permettant à l'utilisateur de choisir un répertoire ?
        Comment retrouver le chemin du répertoire système de Windows ?
        Dans quel répertoire est installé Windows ?
        Comment retrouver les répertoires spéciaux de Windows ?
        Comment Copier un répertoire ?

rechercher
precedent    sommaire    suivant    telechargermiroir


Comment connaître le répertoire de mon application ?
auteur : hachesse
L'objet Application de l'unité Form contient un attribut ExeName: String; qui contient le nom de fichier de l'exécutable de l'application, y compris le chemin d'accès. Pour extraire uniquement le répertoire où se trouve notre programme, on utilisera la fonction ExtractFilePath(const FileName: String):String; de l'unité SysUtils.


Repertoire := ExtractFilePath(Application.ExeName);

Note : Application.ExeName contient la même valeur que ParamStr(0).

lien : Comment récupérer les paramètres passés au programme ?

Comment créer un répertoire ?
auteur : hachesse
On utilise la fonction CreateDir(const Dir: String): Boolean; de l'unité SysUtils. Il est toutefois préférable de tester préalablement si le répertoire n'existe pas déjà. Il est aussi bien vu de vérifier qu'il n'y ait pas eu d'erreurs lors de la création du répertoire.

Exemple de l'aide en ligne de Delphi :

begin
  if not DirectoryExists('C:\temp') then
  if not CreateDir('C:\temp') then
    raise Exception.Create('Impossible de créer C:\temp');
end;
lien : Comment tester si un répertoire existe ?

Comment créer une arborescence de répertoires ?
auteur : Smortex
On utiliser la fonction function ForceDirectories(Dir: string): Boolean; de l'unité SysUtils.

ForceDirectories permet de créer un dossier et ses répertoires parents si nécessaire. Il n'est pas nécessaire de vérifier que le dossier n'existe pas avant d'appeler cette fonction puisque cela se fait avant la création des répertoires.

Exemple de l'aide en ligne de Delphi:

var
  Dir: string;
begin
  Dir := 'C:\APPS\SALES\LOCAL';
  if ForceDirectories(Dir) then
    Label1.Caption := Dir + ' a été créé'
end;
lien : Comment créer un répertoire ?
lien : Comment tester si un répertoire existe ?

Comment supprimer un répertoire ?
auteur : Atlantis
Deux possibilités sont à envisager :
- le répertoire est vide : l'utilisation de la fonction RemoveDir(const Dir: String): Boolean suffit.
- le répertoire n'est pas vide : une solution consiste à utiliser l'API de l'unité ShellAPI :


uses
  ShellApi;

function DelDir(Dir: String): Boolean;
var fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do begin
    wFunc := FO_DELETE;
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
    pFrom := PChar(Dir + #0);
  end;
  Result := (0=ShFileOperation(fos));
end;

Note : il est préférable de s'assurer que le répertoire existe avant de le supprimer.
Ceci fonctionne sur Windows 95 ou NT4 minimum.

lien : en Lien MSDN : structure ShFileOPStruct

Comment renommer un répertoire?
auteur : hachesse
La fonction RenameFile(constOldName, NewName:string):Boolean; de l'unité SysUtils permet de renommer les fichiers mais aussi les répertoires.


RenameFile('c:\tmp\', 'c:\tmp2\');

Note : il est préférable de s'assurer que le répertoire existe avant de le renommer et de contrôler que le répertoire a bien été renommé.

lien : Comment tester si un répertoire existe ?

Comment tester si un répertoire existe ?
auteur : hachesse
On utilise pour cela la fonction DirectoryExists(const Directory: String): Boolean; de l'unité SysUtils.


begin
  if DirectoryExists('C:\MyDirectory\') then
    { le repertoire existe }
  else
    { le repertoire n'existe pas }
end;
lien : Comment tester si un fichier existe ?

Comment ouvrir la boîte de dialogue permettant à l'utilisateur de choisir un répertoire ?
auteur : Atlantis
La fonction SelectDirectory affiche l'explorateur des répertoires de Windows. Il faut ajouter FileCtrl dans la clause Uses. Cette fonction à deux format d'appel différents :

SelectDirectory(constCaption:string;constRoot:WideString;outDirectory:string):Boolean; Cette version permet de choisir le répertoire de départ de la recherche et le titre de la fenêtre.

procedure TForm1.Button1Click(Sender: TObject); 
var 
  ChoixRepertoire : string; 
begin 
  If SelectDirectory('Choisissez le dossier d''installation','C:\TEMP\',ChoixRepertoire) 
    Then Label1.caption := ChoixRepertoire; 
end;

SelectDirectory(varDirectory:string;Options:TSelectDirOpts;HelpCtx:Longint):Boolean; Cette version permet de définir ce qu'il se passe si l'utilisateur choisi un répertoire inexistant.
procedure TForm1.Button1Click(Sender: TObject); 
var 
  ChoixRepertoire : string; 
begin 
  If SelectDirectory(ChoixRepertoire,[sdAllowCreate,sdPerformCreate,sdPrompt],0) 
    Then Label1.caption := ChoixRepertoire; 
end;

sdAllowCreate autorise la sélection d'un répertoire inexistant
sdPerformCreate autorise la boite de dialogue à créer le répertoire
sdPrompt demande la confirmation en cas de création de répertoire.


Comment retrouver le chemin du répertoire système de Windows ?
auteur : Atlantis
Selon la version de Windows, le répertoire système de Windows n'est pas le même (system32 ou System). Pour retrouver ce répertoire, il suffit de le demander à Windows par le biais de la fonction GetSystemDirectory.


function SystemDirectory: String;
const
  dwLength: DWORD = 255;
var
  SystemDir: PChar;
begin
  GetMem(SystemDir, dwLength);
  GetSystemDirectory(SystemDir, dwLength);
  Result := String(SystemDir);
  FreeMem(SystemDir, dwLength);
end;

Dans quel répertoire est installé Windows ?
auteur : Atlantis
Selon la version, Windows est installé en standard soit dans le répertoire C:\WINDOWS, soit dans le répertoire C:\WINNT. Pour retrouver ce répertoire, il suffit de le demander à Windows par le biais de la fonction GetWindowsDirectory.


function WindowsDirectory: String;
const
  dwLength: DWORD = 255;
var
  WindowsDir: PChar;
begin
  GetMem(WindowsDir, dwLength);
  GetWindowsDirectory(WindowsDir, dwLength);
  Result := String(WindowsDir);
  FreeMem(WindowsDir, dwLength);
end;

Comment retrouver les répertoires spéciaux de Windows ?
auteur : Atlantis
Dans l'API Windows, il existe la fonction SHGetSpecialFolderLocation qui permet de récupérer le chemin des répertoires spéciaux de Windows : Bureau, Menu Démarrer...


uses Shlobj;

function SpecialFolder(Folder: Integer): String;
var
  SFolder : pItemIDList;
  SpecialPath : Array[0..MAX_PATH] Of Char;
begin
  SHGetSpecialFolderLocation(Form.Handle, Folder, SFolder);
  SHGetPathFromIDList(SFolder, SpecialPath);
  Result := StrPas(SpecialPath);
end;

{ Application : }
procedure TForm.MyButtonClick(Sender: TObject);
begin
  MyLabel.Caption := SpecialFolder(CSIDL_PERSONAL);
end;

Selon le répertoire que l'on souhaite obtenir, vous devez utiliser l'une des variables suivante :
  • CSIDL_APPDATA : Répertoire contenant les données des applications.
  • CSIDL_COMMON_FAVORITES : Répertoire contenant les Favoris commun à tous les utilisateurs.
  • CSIDL_COMMON_STARTMENU : Répertoire du menu démarrer commun à tous les utilisateurs.
  • CSIDL_COMMON_PROGRAMS : Répertoire Programmes du menu démarrer commun à tous les utilisateurs.
  • CSIDL_COMMON_STARTUP : Répertoire du groupe Démarrage du menu démarrer commun à tous les utilisateurs.
  • CSIDL_COMMON_DESKTOPDIRECTORY : Répertoire correspondant au bureau commun à tous les utilisateurs.
  • CSIDL_COOKIES : Répertoire ou sont stockés les cookies d'Internet Explorer.
  • CSIDL_DESKTOP : Répertoire correspondant à votre Bureau.
  • CSIDL_DESKTOPDIRECTORY : Répertoire correspondant à votre Bureau.
  • CSIDL_FAVORITES : Répertoire Favoris.
  • CSIDL_FONTS : Répertoire dans lequel sont stockées toutes les polices de caractères.
  • CSIDL_HISTORY : Répertoire contenant les historiques d'Internet Explorer.
  • CSIDL_INTERNET_CACHE : Répertoire ou sont stockés les fichiers temporaires d'Internet Explorer.
  • CSIDL_NETHOOD : Répertoire Voisinage Réseau.
  • CSIDL_PERSONAL : Répertoire Mes Documents.
  • CSIDL_PRINTHOOD : Répertoire de voisinage d'impression.
  • CSIDL_PROGRAMS : Répertoire Programmes du Menu Démarrer.
  • CSIDL_RECENT : Répertoire dans lequel se trouvent les raccourcis vers les Fichiers récemment ouverts.
  • CSIDL_SENDTO : Répertoire dans lequel se trouvent les raccourcis Envoyer vers
  • CSIDL_STARTMENU : Répertoire Menu Démarrer.
  • CSIDL_STARTUP : Répertoire du groupe Démarrage du Menu Démarrer.
  • CSIDL_TEMPLATES : Répertoire contenant les modèles de documents de Windows.

lien : en Lien MSDN : fonction SHGetSpecialFolderLocation

Comment Copier un répertoire ?
auteurs : DelpHichem, Vulcanos, Nono40
La fonction suivante vous permet de copier un répertoire :

function CopyFolder(FromFld, ToFld: string): boolean; 
var fos: TSHFileopStruct; 
begin 
// il faut supprimer les antislashs de fin sinon vous aurez droit à un message d'erreur 
  FromFld := ExcludeTrailingPathDelimiter(Trim(FromFld)); 
  ToFld := ExcludeTrailingPathDelimiter(Trim(ToFld)); 

  FillChar(fos, SizeOf(fos),0); 
  with fos do 
  begin 
    wFunc := FO_COPY; 
    pFrom := PChar(FromFld+#0); 
    pTo   := PChar(ToFld+#0); 
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR; 
  end; 
  Result := ShFileOperation(fos)=0; 
end; 
L'appel à la fonction se fait simplement par :

if CopyFolder('d:\Repertoire01', 'c:\Repertoire02')then 
     ShowMessage('Copie effectuée avec succès') else 
     ShowMessage('Copie non effectuée');
La structure SHFILEOPSTRUCT est définie dans l'unité ShellAPI, donc il faudra rajouter celle-ci dans vos uses.


rechercher
precedent    sommaire    suivant    telechargermiroir

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Delphi - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.