Suppression d'un dossier impossible

ludo2223 Messages postés 49 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 31 janvier 2010 - 15 avril 2009 à 10:56
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 15 juin 2009 à 10:26
Bonjour à tous,

Je travaille sur une application utilisant des bases de données Paradox.

Lorsque l'utilisateur supprime un élément depuis l'application je supprime sa base de données associée (fonctionne).
Le répertoire est donc vide mais je ne peux pas le supprimer, windows indique que le répertoire est en cours d'utilisation.
(si je ferme mon programme la suppression redeviens possible. Je pense donc à une ressource non libérée mais je ne vois pas laquelle étant donné que le répertoire ne contient que la base que je libère pour la supprimer.)

Je fait donc appel à vous, si vous avez des idées ?

(Je suis sous Delphi 2009)

Merci d'avance pour votre aide.

Ludovic

35 réponses

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
12 mai 2009 à 19:34
L'impossibilité de suppression de dossier se produit-elle à l'exécution (en dehors de Delphi) ou uniquement lors du débuggage (dans l'EDI) ?

@+
Nico { www.ni69.info }
0
ludo2223 Messages postés 49 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 31 janvier 2010
13 mai 2009 à 09:23
Bonjour,

Merci pour vos réponses.

Je viens de tester de changer le base.directory (essai avant le base.close et après) mais le problème persiste.
Je suis obligé de le supprimer ;)
Les fichiers de la table sont bien supprimés par ma deuxième maquette (celle d'hier) et le blocage concerne la suppression du dossier
qui les contenait.

J'ai également testé en debug et en exécution et le problème apparait dans les deux cas.

Merci pour votre aide

Bonne journée ;)
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 mai 2009 à 09:32
Pourquoi est-tu obligé de supprimer ce dossier ?

cantador
0
ludo2223 Messages postés 49 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 31 janvier 2010
13 mai 2009 à 10:03
Ce dossier correspond a un contenu créé avec l'application, et j'ai besoin de le supprimer au moment ou il supprime ce contenu ;)

Sinon ca obligerait a faire le "ménage" a chaque démarrage de l'application, ce qui ne me parait pas très propre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 mai 2009 à 17:09
Sinon ca obligerait a faire le "ménage" a chaque démarrage de l'application, ce qui ne me parait pas très propre.

Mais non pourquoi ?


C'est une solution comme une autre et qui aurait l'avantage d'éviter ce fameux
blocage puisque ce traitement serait fait d'entrée avant connexion.

il suffit de mettre en place quelques tests:
le dossier existe t-il ?
le fichier existe t-il ?
et paf !

cantador
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
13 mai 2009 à 17:26
@cantador:
Chaque application a ses exigences en matière d'organisation.
Le problème n'est pas "pourquoi supprimer le dossier?", mais bien "pourquoi le dossier est-il bloqué?".
D'autant plus que ça ferait un peu "bricolage" que de le supprimer à chaque début d'exécution, surtout si ce dossier a un nom variable fonction des données en présence lors d'une exécution.

@ludo2223:
Essaye de regarder avec un utilitaire du genre de ceux de SysInternals (ProcessMonitor) si un handle est toujours alloué au dossier ou au fichier lui-même par l'application après la déconnexion de la base et avant la tentative de suppression.

@+
Nico { www.ni69.info }
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 mai 2009 à 19:58
Chaque application a ses exigences en matière d'organisation.

oui, ben tu sais je suis au courant...
Mais en tout cas, il y quelquefois des situations où il faut être inventif.

cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 mai 2009 à 22:12
et j'ajoute que sur
surtout si ce dossier a un nom variable fonction des données en présence lors d'une exécution.

cette difficulté peut être facilement contournée en créant une installation had hoc.

cantador
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
13 mai 2009 à 22:16
Je n'ai pas dit que cela serait forcément plus compliqué à réaliser, mais encore une fois on entrerait encore plus dans le domaine du bricolage.

@+
Nico { www.ni69.info }
0
ludo2223 Messages postés 49 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 31 janvier 2010
14 mai 2009 à 10:09
Merci pour vos réponses.

J'ai testé l'utilitaire de sysinternals et je constate que le programme fait bien des closeFile sur les dossiers y compris sur celui qui est bloqué. Si vous pouvez me dire les événements les plus importants a surveiller.

En ce qui concerne la suppression, ce qui est délicat c'est que l'utilisateur peut créer des objets et un dossier associé est créé. Le nom de ce dossier est stocké dans une base de données mais lorsqu'il supprime l'objet, sa référence dans la base est supprimé. Au prochain démarrage de l'appli je ne connais donc plus le nom du dossier qui était bloqué a moins de faire une liste d'attente ou de tout parcourir !

Merci pour votre aide.

ludo
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
14 mai 2009 à 19:36
sa référence dans la base est supprimé.

ben, on est pas dans la m...

cantador
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
17 mai 2009 à 12:33
Disons que tous les événements sont à surveiller d'une certaine manière pour mieux comprendre comment le programme interagit avec le système.
En ne sélectionnant que "Show File System Activity", et en mettant un filtre sur ton processus, as-tu vérifié qu'à chaque événement IRP_MJ_CREATE correspond un IRP_MJ_CLOSE ?

@+
Nico { www.ni69.info }
0
ludo2223 Messages postés 49 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 31 janvier 2010
18 mai 2009 à 09:33
Bonjour,

Merci pour vos réponses.

J'ai testé avec Process Monitor avec les filtres que vous m'avez indiqués mais je n'ai pas vu les événements dont vous parlez.
Il y a plusieurs événements que je ne comprend pas trop :
- CreateFile sur un répertoire et sur des fichiers déjà existants (cela correspondrait à un open parce que c'est suivi d'un readFile sur le même fichier ? )
- QueryDirectory doit être suivi de quoi ( closeFile ) ? Et qu'elle la différence ave un Createfile sur ce même répertoire ?

J'ai l'impression qu'il n'y a pas vraiment de différence de faite entre fichier et répertoire au niveau des nom des événement.

Si vous voulez je peux vous envoyer mon fichier de trace.

Merci pour votre aide.

ludo
0
ludo2223 Messages postés 49 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 31 janvier 2010
15 juin 2009 à 09:29
Bonjour,

Ne trouvant pas de solution, j'ai créé un rapport de bug sur Quality Central (Service de rapport de bug d'Embarcadero). Une personne a rapporté un bug similaire avec l'ouverture d'un projet. Si on ouvre un projet et qu'on le ferme son dossier est (dans certains cas) bloqué jusqu'à fermeture de l'IDE. Tours les fichiers du projet peuvent être supprimés. On retrouve donc le cas d'un dossier vide non supprimable.

Bonne continuation

Ludo
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 juin 2009 à 10:26
jusqu'à fermeture de l'IDE.

?
il faut tester aussi avec l'exécutable sans delphi..

cantador
0
Rejoignez-nous