Utilisateur anonyme
-
1 mai 2006 à 11:07
Matt 261
Messages postés1173Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention10 septembre 2011
-
2 mai 2006 à 17:22
Salut à tous
J'utilise les composant Abbrevia pour décompresser un zip :
Procedure TForm1.Dezzip;
begin
AbUnZipper1.FileName:=Chemin+'fichier.zip';
CreateDir(Chemin+'fichier');
AbUnZipper1.BaseDirectory:=Chemin+'fichier';
AbUnZipper1.ExtractFiles('*.*');
end;
Tout se passe bien. Mais quand je fais DeleteFile(Chemin+'fichier.zip'); bien le fichier ne se delete pas. Il semble etre encore utilisé par mon application. La je bloque car je ne sais pas comment faire.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 1 mai 2006 à 17:35
une fois les fichiers dézippé, assure toi que le fichier zip soit refermé et libéré de toute utilisation.
je pense que le composant que tu utilise ne ferme le fichier qu'a la liberation ou chargement d'un autre fichier ce qui fait que comme le fichier est encore ouvert, DeleteFile ou meme Erase ne peuvent pas le supprimer.
etonnant meme que tu n'est pas l'injure windows "ne peu supprimer le fichier car ce fichier est utiliser par un autre processus"
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 1 mai 2006 à 19:28
Dans le code donné par matt261, je trouve gênant qu'on libère AbUnZipper1 alors qu'il est alloué ailleurs apparemment.
Au prochain appel de la méthode Dezzip, ça craint...
May Delphi be with you !
<hr color="#008000">
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Oui ma variable "chemin" contient "". J'y avais pensé :
chemin:=ExtractFilePath(Paramstr(0)); Normalement avec cette fonction
j'ai bien "" a la fin il me semble.
Matt 261
Messages postés1173Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention10 septembre 20113 2 mai 2006 à 10:00
Oui moi aussi je me suis posé des questions quand j'ai donné le bout de code si par le plus grand des hasard on devait réappeller AbUnZipper1. Logiquement, il doit se produire une grosse erreur mais tout dépend de comment ton prog est fait. Je m'explique, si c'est une fenêtre qui s'ouvre, qui décompresse et qui se ferme alors là y'a pas de problèmes... MAIS si c'est une fenêtre qui s'ouvre et avec laquelle tu peux décompresser plusieurs fichiers alors là il faut recréer le composant au début de ta procédure pour le détruire à la fin...
J'espère avoir été clair sinon dites le moi...
<hr size="2" width="100%">La paresse est la mère du génie...
En fait j'ai un dossier que j'ai zippé et mis en ressources. Donc je le récupère sur le HDD et je le dezippe. Finalement j'efface le fichier zipper du HDD.
Il y a tjs la possibilité des try excpet finally en cas de beug. Cela evitera le beug mais le probleme ne sera pas résolu : en cas de réouverture. Ca me gène qu'apres le dezippage le AbUnzipper ne soit pas "libéré" automatiquement : est ce un oublie de la part du développeur ?
Ca va m'en faire du travail : finir mon appli, voir ce probleme, et faire un compo pour le Shell de Windows. Lol je suis pas pres d'avoir finit.