ludo2223
Messages postés49Date d'inscriptionjeudi 4 septembre 2008StatutMembreDernière intervention31 janvier 2010
-
15 avril 2009 à 10:56
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 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 ?
ludo2223
Messages postés49Date d'inscriptionjeudi 4 septembre 2008StatutMembreDernière intervention31 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.
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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.
ludo2223
Messages postés49Date d'inscriptionjeudi 4 septembre 2008StatutMembreDernière intervention31 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 !
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 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 ?
ludo2223
Messages postés49Date d'inscriptionjeudi 4 septembre 2008StatutMembreDernière intervention31 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.
ludo2223
Messages postés49Date d'inscriptionjeudi 4 septembre 2008StatutMembreDernière intervention31 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.