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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

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