Bonjour,
j'essaye, en vain, de réussir via mon application à supprimer un dossier ouvert.
J'ai besoin d'un ptit coup de main, supprimer un dossier ça va mais pas un dossier ouvert.
André
Bonjour,
j'essaye, en vain, de réussir via mon application à supprimer un dossier ouvert.
J'ai besoin d'un ptit coup de main, supprimer un dossier ça va mais pas un dossier ouvert.
André
Ils ne savaient pas que c'était impossible, alors ils l'ont fait !
Bonsoir,
@ andreditdd, essaye cette fonction.
@+,
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 Uses ShellAPI; {$R *.dfm} Function DelTree(DirName : string): Boolean; var SHFileOpStruct : TSHFileOpStruct; DirBuf : array [0..255] of char; begin try Fillchar(SHFileOpStruct,Sizeof(SHFileOpStruct),0) ; FillChar(DirBuf, Sizeof(DirBuf), 0 ) ; StrPCopy(DirBuf, DirName) ; with SHFileOpStruct do begin Wnd := 0; pFrom := @DirBuf; wFunc := FO_DELETE; fFlags := FOF_ALLOWUNDO; fFlags := fFlags or FOF_NOCONFIRMATION; fFlags := fFlags or FOF_SILENT; end; Result := (SHFileOperation(SHFileOpStruct) = 0) ; except Result := False; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if DelTree('C:\Data\Delphi\Dossier et icone\Test') then ShowMessage('Dossier éffacé!') else ShowMessage('Erreurs !') ; end;
Cincap
salut,
c'est ok,cette fonction supprime un dossier ouvert.
je crois que nous avons déjà discuté à propos de ça sur le forum .
a+
NABIL74
@ Nabil74, salut, seule condition c'est que aucun fichier dans ce dossier ne soit ouvert.
@+,
Cincap
salut l'ami ,
oui oui si le dossier contient un fichier ouvert, le message d'erreur sera affiché.
a+
Code : Sélectionner tout - Visualiser dans une fenêtre à part ShowMessage('Erreurs !') ;
NABIl74
Un grand merci Cincap...
L'ennui c'est que dans ce dossier, il y a un fichier ouvert
et ça ne m'arrange pas.
Avez vous une botte secrette ???
André
Ils ne savaient pas que c'était impossible, alors ils l'ont fait !
@ Nabil74,
forcément que le code gère l'erreur si un fichier est ouvert dans le dossier à éffacer, donc à partir de la il faut un autre code pour éffacer mais la, c'est une autre paire de manche car chaque fichier ouvert engage un processus me semble t'il.oui oui si le dossier contient un fichier ouvert, le message d'erreur sera affiché.
Pas de solution pour l'instant.
@+,
Cincap
@ andreditdd
Même si un fichier est ouvert, il ne sera pas éffacé mais bien le dossier et son contenu fermé
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 var MainForm: TMainForm; function EffaceDossier(Dossier: String): Boolean; implementation {$R *.dfm} {------- Mon Code ---------------------------------------------------------------------} function EffaceDossier(Dossier: String): Boolean; var FileOpStruct: TShFileOpStruct; begin FileOpStruct.Wnd := 0; FileOpStruct.wFunc := FO_DELETE; FileOpStruct.pFrom := PChar(Dossier); FileOpStruct.pTo := Nil; FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_SILENT; FileOpStruct.lpszProgressTitle := Nil; Result := ShFileOperation(FileOpStruct) = 0; end; procedure TMainForm.BitBtn1Click(Sender: TObject); var Dir :string; begin Dir := edit1.Text; if DirectoryExists(Dir) Then EffaceDossier(Dir); end;
Si c'est toi qui as ouvert ce fichier dans une autre de tes applications, tu pourrais lui envoyer un message pour lui demander de le fermer.
Si tu n'en est pas l'heureux créateur, tu risques surtout de générer des erreurs au niveau de l'autre application !
Encore merci Cincap pour ton aide mais ça ne fonctionne toujours pas.
En fait, mon soft dézipe un dossier à l'aide de ZipForge mais lorsqu'il y a erreur sur le mot de passe, j'aimerais que mon soft détruise le dossier déja créé avant de permettre une autre tentative de mot de passe.
Je pense avoir fermé correctement ZipForge mais le dossier est tjrs utilisé par mon application.
André
Ils ne savaient pas que c'était impossible, alors ils l'ont fait !
Bon, je pense à un truc...
Y a t-il moyen de savoir quel est la partie de mon application qui garde ouvert le fichier qui ce trouve dans le dossier que je désire supprimer ?
André
Ils ne savaient pas que c'était impossible, alors ils l'ont fait !
je n'ai pas beaucoup travaillé avec ZipForge,mais, je pense que l'erreur se passe au niveau de la fermeture de ZipForge. tu ne parvient pas à supprimer le dossier car zipforge reste toujours ouvert.
tu le fermes avec: "CloseArchive()" non?
a+
NABIL74
Oui exact.
Je le ferme avec cette commande mais je n'ai pas confirmation que cela fonctionne car mon dossier reste ouvert.
André
Ils ne savaient pas que c'était impossible, alors ils l'ont fait !
t'as essayé de mettre la fonction de cincap(effacer dossier) après "CloseArchive" et ça n'a rien donné?
tu peux aussi essayer de faire un "Close" et puis un "free" de l'archive et puis essayer d'effacer le dossier.a+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 . . Ton archive.CloseArchive(); Ton archive.Free; Fonction de cincap.
NABIL74
Oui effectivement...
J'ai même essayé en créant un fichier .bat pour cela mais rien n'y fait
André
Ils ne savaient pas que c'était impossible, alors ils l'ont fait !
nous avons écrit nos 2 messages en même temps.alors comme je te l'ai dis,essaye de faire un "Close" et puis un "free" de l'archive et puis essayer d'effacer le dossier.
NABIL74
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 . . Ton archive.CloseArchive(); Ton archive.Free; Fonction de cincap.
Bonjour à toutes et à tous,
@ andreditdd, si tu postais le code qui ferme l'archive, cela permettrais de mieux comprendre le problème sinon AndNotOr t'a lancé sur une piste.
Et si tu mets ceci :
@+,CloseArchive(ton archive);
Cincap
Bonjour,
Juste une idée en passant.
Les programmes de désinstallation de programmes ont souvent le même problème. Il le résolve en supprimant les fichiers ouverts et les répertoire lors de la prochaine ouverture de l'ordinateur.
Je crois que cela ce fait en ajoutant une ligne dans le registre.
@
Si tu connais le nom du fichier ouvert tu peux comme l'a précisé AndNotOr utiliser le message.
Exemple :
Sinon, voici un lien intéressant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 var monhandle : THandle; Begin //Le second paramètre de FindWindow est le titre de la fenêtre! monhandle := FindWindow(nil,'Monfichierouvert'); SendMessage(monhandle,WM_CLOSE,0,0); end;
http://www.madshi.net/madExceptDescription.htm
@+,
Cincap
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