Chemin verrouiller

raynaldos Messages postés 10 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 20 novembre 2007 - 19 nov. 2007 à 15:13
raynaldos Messages postés 10 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 20 novembre 2007 - 20 nov. 2007 à 22:24
Voici l'Explication!
La situation est la suivante; j'ai un petit programme qui a besoin de détruire des tables dans un répertoire puis le répertoire par la suite je réussis à détruire les tables mais quand je viens pour détruire le répertoire il me dit qu'il est utilisé par une personne ou un programme.
J'ai pris soin de ne avoir ce répertoire comme répertoire courant «Setcurrentdir= c:\» et non mon répertoire que je veut détruire.
J'ai utilisé de façon externe «unlocker» et je voie que ça fonctionne bien, je voie le chemin verrouiller dans la fenêtre et je peut «débloqué» au besoin le répertoire.
Mais comment puis-je le faire avec delphi?

Avec «unlocker» je réussis à enlever les locks sur le répertoire mais je ne veut pas avoir à utilisé «unlocker» quel serait le code?

Piste: c'est une question de «PID» et processus.

8 réponses

raynaldos Messages postés 10 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 20 novembre 2007
19 nov. 2007 à 16:14
Je ne suis pas habitué avec ce site et les façons de faire
Je m'en excuse !

«C'est surement que tu n'as pas fermé un des fichiers qui est dedans»
Les tables ont tous été détruite dans ce répertoire donc il ne reste plus
aucun fichier.

À cette étape il ne me reste qu'a détruire le répertoire mais voilà qu'il
m'est impossible de le détruire.

Message;
Impossible de supprimer z2 : Cette ressource est utilisée par une autre personne ou un autre programme. Fermez les programmes susceptibles d'utiliser le fichier.....


J'ai utilisé les functions les plus commune mais ça ne fonctionne pas donc je me suis mis à douté que le répertoire était locker par mon programme étant donné que j'avais détruit des fichiers. Quand j'utilise le programme «Unlocker.exe» il m'indique que le répertoire est bloqué voici
la ligne;

Processus Chemin verrouillé PID Chemin processus
GESTIONNAIRE.EXE C:\GDATA\PROJET\Z2 3676 C:\LE GESTIONNAIRE.EXE

Les options de «Unlocker.exe» sont;
«Fermer le processus» «Débloquer» «Tout débloquer»

Si je clique sur «Débloquer» mon répertoire est revenus libre et je peut le détruire.

Quand je dit que je ne peut pas le détruire c'est dans l'explorateur de windows que j'essaie de le détruire et non par mon programme car je me dit
que c'est inutile d'essayé de le détruire par programation si je ne suis même
pas capable de le détruire directement mais quand je clique sur «Débloquer» dans «Unlocker.exe» et que j'essais de le détruire à nouveau là ça marche !

Alors ?
0
Utilisateur anonyme
20 nov. 2007 à 09:33
[auteur/RAYNALDOS/82365.aspx raynaldos]
: Pas l'habitude. Ouep mais il y a le règlement et tu as du le lire .

Pour reprendre la remarque de Loda : Sans code on ne peut pas savoir.

Si tu ne peux pas supprimer ton répertoire c'est qu'un de tes fichiers est utisé. Donc ton code de suppression doit avoir un ptit problème : mais sans code on ne peut pas te dire.
0
raynaldos Messages postés 10 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 20 novembre 2007
20 nov. 2007 à 14:03
Je n'avait pas l'habitude d'utiliser votre fenêtre pour demandé de
l'aide mais je comprend par vos propos que je ne suis pas le bien venus.

Milles excuse pour avoir dérangé votre routine.

Mais voilà la réponse à mes questions j'ai trouvé q'étant donné que les
tables que je détruit sont des tables paradox c'est la session qui lock le répertoire je doit donc après avoir détruit mes tables fermer la session par «session.close» détruire mon répertoire et réouvrir ma session avec «session.open» mais en débug ça ne marche pas car c'est «delphi» qui lock le répertoire il faut écrire le code et lancer l'exécutable et là ça marche.

J'espère avoir contribué à votre éveille !
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
20 nov. 2007 à 15:03
re,

je voudrais juste clarifier un-deux points:

"votre fenêtre pour demandé de
l'aide"
cela s'appel un forum, c'est un concept très répondu sur internet. renseignes-toi.

"je comprend par vos propos que je ne suis pas le bien venus"
Il en est tout autremenet, désolé de l'incompréhension.
Le problème est qu'on aime pas bcp de se répeter ou parler dans le vide. Relit le premier thread et tu comprendra ce que j'entend par là. 
Tu vois, l'idée c'est qu'on pas très envie de perdre du temps à expliquer, si l'autre personne ne veux pas prendre du temps pour lire, appliquer et répondre (dans un français compréhensible et avec ponctuaction).
Ceci implique, qu'après un certain temps, on a tendance à devenir plus sec.

Si tu rencontre d'autres problèmes et que tu viens avec une question bien faite, tu recevra une réponse à ta question. Le problème vient de comment tu pose ta question et comment tu traite les réponses fournies.

je te re-recommande de lire cette article:
http://www.gnurou.org/writing/smartquestionsfr

"session.close"
donc tu n'avais pas bien fermé tes tables....  prend 5min pour relit le premier thread.

bonne continuation,

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0

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

Posez votre question
raynaldos Messages postés 10 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 20 novembre 2007
20 nov. 2007 à 15:20
Merci Loda !

J'ai lu l'article et je te comprend !

La seul façon que je connaît pour fermer les tables est
«table.close» ou «table.active := false;»

En existe-il d'autre?
0
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
20 nov. 2007 à 19:12
Bonjour tout le monde ;  si j’ai bien compris tu cherche à détruire un
répertoire qui contient des tables mais, en même temps ces tables sont utilisées
par ton application, se qui veut dire que ton appli  est reliée à ces tables via un répertoire ou
via un alias qui pointe sur ce répertoire, se qui implique que ton appli est
reliée à ce répertoire !!!! Alors…le bon sens nous dit que pour supprimer
le répertoire il faut d’abord désactiver ce lien. ( sinon ,c'est comme si tu veux démonter
une roue de voiture qui roule à <st1:metricconverter productid="200 Km/h" w:st="on">200 Km/h</st1:metricconverter>) . Cordialement.


Ps : je profite de cette occasion pour souhaiter bon retour à
Francky
0
Utilisateur anonyme
20 nov. 2007 à 22:00
Salut,

Deux questions

1) Avant de supprimer ton répertoire prend tu la peine de vérifier que ta table est bien fermée ?

MaTable.close;
If not MaTable.Active Then
//Procedure pour supprimer fichiers et répertoire ?.

 2)Est tu sur que c'est la suppression du répertoire qui pose problème ou plutot un fichier qui n'est pas supprimé car utilisé ? Ton erreur pointerait elle pas son nez suite à un DeleteFile ? Car normalement si un répertoire est vide il y a pas de raison qu'on ne puisse pas le supprimer (Penser à vérifier l'absence de fichiers cachés aussi).

Si ta table met du temps à se fermer ca peut poser problème. Dans ce cas tu peux faire un truc du style :

While MaTable.Active Do
Application.ProcessMessages
If not MaTable.Active Then

//Procedure pour supprimer fichiers et répertoire ?.

Le problème c'est que tu n'as posté aucun bout de code et pour savoir ce qui occupe ta table .... ben on peut pas dire comme ca .
0
raynaldos Messages postés 10 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 20 novembre 2007
20 nov. 2007 à 22:24
Merci Francky!
Mais ma table est bien fermé car si elle n'est pas fermé je ne peut pas
la supprimé.

Voici un test !

1)Crée un nouveau projet delphi
2)Place sur ta feuille;
un TTable
et un TButton
3)Crée un nouveau répertoire exemple c:\A
4)Dans ce répertoire place une table paradox exemple; table.db et table.px
5)Relie la table à l'objet TTable.
6)Maintenant dans l'évènement click du bouton écrit le code
suivant;
//Ici j'ouvre la table car dans la vrai vie elle sera ouverte
//et fermé.
Table1.open;
Table1.close;

//Ici je détruit les deux fichiers
deleteFile('C:\A\MaTable.db') ;
deleteFile('C:\A\MaTable.px') ;

//ou
Table1.deleteTable;

//Ici la table est supprimé.

//Maintenant je détruit le répertoire
removedir('c:\A');

//Mais le répertoire ne sera pas supprimé

Maintenant écrit ce code
Table1.DeleteTable ;
session.close ;
removedir('c:\aa');
session.open;

//Le répertoire ne sera pas supprimé car tu est en débug en création.

//Mais enregistre ton application.
//Ferme delphi
//Et exécute ton application et ça va fonctionné

Et voilà les joies de la programmation !

Si vous trouvé une façon de faire autre que session.close et session.open et que je peut vérifié quand je suis en création avec delphi j'aimerai vraiement le savoir

Merci beaucoup !
0
Rejoignez-nous