Bonjour
Je voudrais supprimer tous les fichiers *.shx, *.shp et *.dbf d'un répertoire.
Est-ce possible sans utiliser la fonction «DeleteFile» dans 3 boucles «while» avec «FindNext» pour faire plus court et plus rapide ?
Merci d'avance
Bonjour
Je voudrais supprimer tous les fichiers *.shx, *.shp et *.dbf d'un répertoire.
Est-ce possible sans utiliser la fonction «DeleteFile» dans 3 boucles «while» avec «FindNext» pour faire plus court et plus rapide ?
Merci d'avance
Peut-être qu'avec les ShFileOperation c'est plus facile. Fais une recherche sur ce mot et ses dérivés (pluriel, espaces, etc.), c'est un sujet qui a déjà été traités plusieurs fois.
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
Cela fonctionne
Merci à toi, vénéré Delphiste
Peut-être cette procédure que j'utilise?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 procedure DeleteFiles (const Path, Mask : string; recursive : boolean); var Result : integer; SearchRec : TSearchRec; begin Result := FindFirst(Path + Mask, faAnyFile - faDirectory, SearchRec); while Result = 0 do begin if not DeleteFile (Path + SearchRec.name) then begin FileSetAttr (Path + SearchRec.name, 0); { reset all flags } DeleteFile (Path + SearchRec.name); end; Result := FindNext(SearchRec); end; FindClose(SearchRec); if not recursive then exit; Result := FindFirst(Path + '*.*', faDirectory, SearchRec); while Result = 0 do begin if (SearchRec.name <> '.') and (SearchRec.name <> '..') then begin FileSetAttr (Path + SearchRec.name, faDirectory); DeleteFiles (Path + SearchRec.name + '\', Mask, TRUE); end; Result := FindNext(SearchRec); end; FindClose(SearchRec); end; begin // exemples comment l'utiliser deletefiles('C:\Program Files\temp\temp\','*.lck',true); deletefiles('\\saturne\C\Program Files\temp\temp2\','*.txt',true); deletefiles('\\jupiter\C\Program Files\temp\temp3\','*.dat',true); end.
J'ai suivi le conseil de sjrd et utilisé «SHFileOperation».
Cela donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 procedure FileSuppr(Handle:HWND;Source:String ; FlagsOptions: FILEOP_FLAGS); var lpFileOp:TSHFILEOPSTRUCTA; TabFrom:array[0..255] of char; i:integer; begin For i:=0 to length(Source)-1 do TabFrom[i]:=Source[i+1]; TabFrom[length(Source)]:=#0; TabFrom[length(Source)+1]:=#0; lpFileOp.Wnd:=handle; lpFileOp.wFunc:=FO_DELETE; // l'action sera un effacement lpFileOp.pFrom:=TabFrom; // contient le ou les fichiers /dossiers à recopier lpFileOp.pTo:=''; lpFileOp.fFlags:=FlagsOptions; SHFileOperation(lpFileOp); // procède à l'effacement end; begin // exemple d'appel FileSuppr(Handle,'E:\Carto\*.Shp', FOF_NOCONFIRMATION); end.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager