IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Probleme de suppression d'un répertoire


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut Probleme de suppression d'un répertoire
    Salut tt le monde,

    Voila
    Mon appli créé un répertoire pour y placer des fichiers de bases de données temporaires. Lorsque je veux supprimer ces derniers, les fichiers ne posent aucun probleme, cependant le répertoire ne veux pas se supprimer. J'ai un code d'erreur 32 (ERROR_SHARING_VIOLATION). Ma session est bien fermée et l'alias est bien supprimé.

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    Où se trouve ce répertoire?
    Lorsque tu souhaites le supprimer, est-il vide?
    Si non, un des fichiers n'est il pas utilisé?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Je suis administrateur donc j'ai tous les droits d'accés.
    Ce répertoire est vide lorsque je veux le supprimer.

    Je pense que c'est le BDE qui m'empeche de le supprimer, dans mon appli, j'ai supprimé tous les alias et fermer toutes les sessions...

  4. #4
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Je suppose que tu dois faire un boucle pour supprimer tes fichiers. Peux tu faire voir un peu de code ?

    Il se peux que l'OS soit encore en train de supprimer des fichiers lorsque tu demandes la suppression du dossier. Si tu attends plus longtemps avant de l'enlever, est-ce que cela fonctionne?

    Genre si tu fais un test avec: sur un bouton tu supprimes le contenu et sur un autre le dossier. Le temps de passer de l'un à l'autre, il se peux que tu puisses y arriver. Dans ce cas ajoute juste un Sleep.

    As tu essayés de supprimer un autre dossier vide, pour voir juste si ca fonctionne? Il n'y a pas de raison que cela vienne des droits d'accès sachant que tu arrives à éliminer son contenu.

    Je pense plutôt que tu vas un peu trop vite. Essaye juste pour voir le coup de faire les deux actions séparéments.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    J'ai essayé d'attendre un peu, mais c'est toujours pareil...

    Voici le code :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    /*
    Arborescence :
    ..\Repertoire
             | Sous repertoire
             |          | plusieurs fichiers
             | plusieurs fichiers
    */
    TSearchRec sr;
    String SourcePath = Caption  ;
    bool Ok = true ;
     
    /*
    ** Supprime les fichiers contenus dans le sous repertoire...
    */
    if (FindFirst(VerifDoubleSlash( SourcePath )+ VerifDoubleSlash( PATH_ORDER ) + "*.*", faArchive, sr) == 0) {
    	Ok = DeleteFile (sr.Name.c_str()) ;
    	while ((Ok) && (FindNext(sr) == 0)) Ok = DeleteFile (sr.Name.c_str()) ;
    	FindClose(sr);
    	if (!Ok) {
    		Application->MessageBox(MSG_PB_SUPP.c_str(), MSG_CIRIS.c_str(), MB_OK);
    		return ;
    	}
    }
     
    /*
    ** Supprime les fichiers contenus dans le repertoire...
    */
    if (FindFirst(SourcePath+"\\*.*", faArchive, sr) == 0) {
    	Ok = DeleteFile (sr.Name.c_str()) ;
    	while ((Ok) && (FindNext(sr) == 0)) Ok = DeleteFile (sr.Name.c_str()) ;
    	FindClose(sr);
    	if (!Ok) {
    		//Application->MessageBox(MSG_PB_SUPPR.c_str(), MSG_CIRIS.c_str(), MB_OK);
    		//return ;
    	}
    }
     
    SetCurrentDir (SourcePath) ;
    /*
    ** Tente de supprimer 'Sous repertoire' mais échoue...
    */
    Ok = RemoveDir (VerifDoubleSlash( SourcePath ) + PATH_ORDER) ;
    SetCurrentDir (RepertoireLogiciel) ;
    /*
    ** Echoue forcement, car 'Sous repertoire est toujours présent...
    */
    Ok = RemoveDir (SourcePath) ;
    J'espere que tu comprendra...
    Merci

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    J'ai vu ton code et il fonctionne théoriquement. Par contre msdn expliquerait ton problème de la manière suivante:
    ERROR_SHARING_VIOLATION 32
    The process cannot access the file because it is being used by another process.
    Par contre, j'ai essayé de suprimer un dossier ouvert et le RemoveDir ferme la fenetre et supprime le dossier (même sur un réseau où je ne suis pas administrateur). Même si le dossier est ouvert par un autre utilisateur, j'arrive à le supprimer.

    Et lorsque tu fais ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        if(RemoveDir(FileName) == false)
           ShowMessage("Error "+IntToStr(GetLastError()));
    Tu obtiens une erreur 32 ???
    Je ne comprend pas trop pourquoi, vu qu'il est vide. J'ai réussi à reproduire ton problème en partageant un dossier sur mon disque dur et en le visualisant avec un autre utilisateur.

    Que tu ais ou pas les droits administrateur, si tu souhaites l'effacer, il ne faut pas que des utilisateurs soit dessus. Une méthode simple serait de départager ton fichier.
    Je cherche comment et je te recontact.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Re,

    Alors bandit boy, as tu trouvé comment faire??

    Merci, a+

  8. #8
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Pas encore, je fouille sur msdn, mais je n'arrive pas à trouver mon bonheur. C'est qu'une question de temps, je le trouverais bien.
    Et toi, tu as une idée sur comment faire?

    Sinon c'est bien ca, ton fichier qui ne se supprime pas est bien partagé (dessiné avec une main dessous) ??

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Non, il n'est pas partagé, en faite je crée ce faleux répertoire, puis je crée un alias bde (driver : paradox). Lorsque je veux le supprimer, je supprime l'alias qui pointe dessus, et ferme ttes les connexions de la base de données.

    J'ai voulu modifier les attributs de sécuritées pour voir, mais ca n'a rien donné.
    Le truc c'est que je ne sait pas comment libérer ttes les Instances du BDE, car c'est lui qui m'empeche de le supprimer.

    voila ++

  10. #10
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Citation Envoyé par selmak7
    Non, il n'est pas partagé, en faite je crée ce faleux répertoire, puis je crée un alias bde (driver : paradox). Lorsque je veux le supprimer, je supprime l'alias qui pointe dessus, et ferme ttes les connexions de la base de données.

    J'ai voulu modifier les attributs de sécuritées pour voir, mais ca n'a rien donné.
    Le truc c'est que je ne sait pas comment libérer ttes les Instances du BDE, car c'est lui qui m'empeche de le supprimer.

    voila ++
    De quels instances tu parles ? Si tu pointes encore dessus avec les pointeurs, tu peux utiliser delete.

    Mais il se peut que le problème que j'ai réussi à reproduire donne le même résultat que toi, mais ne soit pas le même. Je fais d'autres test.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Mon sous répertoire ne peut pas etre supprimé, car une autre application l'utilise (soit le BDE). Ce que j'ai donc essayé de faire, c'est de libérer toutes les ressources du BDE pour pouvoir le supprimer. Peut etre que ta solution marchera pour mon probleme.

    J'ai aussi voulu mofidier les attributs de sécurité de mon répertoire pour voir : mais ca n'a rien donné...

    a+

  12. #12
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Essaye d'ajouter une instruction permettant d'effacer ton pointeur de recherche. Je ne garanti pas que ca marche, mais on peu toujours essayer.
    Il se peut que ta recherche pointe encore sur ton dossier et donc qu'elle est utilisé, comme ca tu effaces tout ce dont ton pgm utilise du dossier.

    Tente, tu me donneras le résultat.
    Courage

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Merci pour ta motivation...

    Donc, depuis que j'ai posté cette discution, mon appli a légèrement changé. C'est à dire que je ne passe plus par une boucle de recherche (sr), mais je passe par l'api windows en utilisant la fonction 'SHFileOperation' qui me supprime récurssivement tous les fichiers et sous répertoires présents dans le répertoire racine : Allègement du code... En tous cas, cela n'a pas résolu mon probleme, le sous répertoire refuse de se supprimer.

    C'est vrai que ca serai interessant de résoudre se problème, car j'ai vu sur plusieurs forums que plusieurs personnes ont rencontré ce problème sans parvenir à le résoudre.

  14. #14
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Quel Flag as tu utilisé pour ton fonctionnement. Il se peut que FOF_NOERRORUI ne prévienne pas l'utilisateur de l'erreur et donc supprime effectivement le fichier. A tester

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Je viens de débuter un autre projet, celui ci n'utilise pas BDE. Je dois gèrer des fichiers XML pour des configurations de logiciels. Mon problème, qui en faite reste le même et que lorsque mon fichier de config n'éxiste pas, je le crée (pas de problème), mais lorsque je fais un 'FileOpen' dessus, il échoue avec le code erreur 32. Si par contre, le fichier éxiste déjà, le 'FileOpen' réussit...

    Je ne vois pas dout cela peut venir, peut être une option de windows....
    Donc le problème ne viens pas du BDE, comme je pensé...

  16. #16
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Là j'avoue que je suis dépassé. J'ai cherché sur d'autre site, mais je n'ai trouvé aucune explication logique.
    Je continue à chercher, mais je commence à perdre espoir de trouver la solution au miracle windows

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Je te remercie pour les recherches que tu fais de ton coté. De mon coté, j'ai toujours rien trouvé . Je commence moi aussi à désespérer un peu...

Discussions similaires

  1. probleme de suppression apartir du fichier
    Par letoil dans le forum C
    Réponses: 3
    Dernier message: 05/05/2006, 00h02
  2. [VBA] Problem de suppression de composant
    Par jesus144 dans le forum IHM
    Réponses: 9
    Dernier message: 26/04/2006, 10h03
  3. [REDHAT] Problème de suppression avec dépendance
    Par byloute dans le forum RedHat / CentOS / Fedora
    Réponses: 1
    Dernier message: 21/04/2006, 18h19
  4. [VB6] Suppression d'un répertoire et sous répertoire
    Par Tsien dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 24/01/2006, 13h37
  5. Réponses: 1
    Dernier message: 11/01/2006, 19h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo