|
| 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 ?
|
|
| 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 ?
|
|
| 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 ?
|
|
| 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 : Lien MSDN : structure ShFileOPStruct
|
|
| 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 ?
|
|
| auteur : hachesse |
On utilise pour cela la fonction DirectoryExists(const Directory: String): Boolean; de l'unité SysUtils.
begin
if DirectoryExists('C:\MyDirectory\') then
else
end;
|
|
lien : Comment tester si un fichier existe ?
|
|
| 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.
|
|
| 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;
|
|
|
| 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;
|
|
|
| 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;
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 : Lien MSDN : fonction SHGetSpecialFolderLocation
|
|
| auteurs : DelpHichem, Vulcanos, Nono40 |
La fonction suivante vous permet de copier un répertoire :
function CopyFolder(FromFld, ToFld: string): boolean;
var fos: TSHFileopStruct;
begin
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.
|
Consultez les autres F.A.Q's


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.