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

Windows Discussion :

suppression impossible de fichier


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut suppression impossible de fichier
    Hello !

    J'ai un petit probleme, je souhaite effacer un fichier avec mon IHM codé en C sans MFC. Le probleme est que la fonction deleteFile me renvoi False et que le fichier ne veut pas se supprimer... Je suppose que l'IHM doit garder l'acces a ce fichier... Mais je ne sais pas comment faire pour le supprimer malgré tout...

    Quelqu'un aurait il une idee ????

    Merci d'avance !!!

  2. #2
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut suppression impossible de fichier
    Il faut regarder l'erreur qui est retournée par GetLastError().
    Tu as aussi a disposition la fonction FormatMessage() qui permet
    d'avoir une description de l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      LPVOID lpMsgBuf;
      DWORD dwLastError = GetLastError(); 
    
      FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                     NULL,
                     dwLastError,
                     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                     (LPTSTR) &lpMsgBuf,
                     0, 
                     NULL );
    
      AfxMessageBox(lpMsgBuf);
      LocalFree(lpMsgBuf);
    A partir de là, tu pourras déduire ce qui ne va pas (enfin... en thérorie !)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    ok, merci bcp !! Mais j'ai essayé ca et il me dit AfxMessageBox : identifier not found...


    Je comprend pas pk !! J'utilise pas les MFC, c'est peut etre la raison, non?

  4. #4
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Arrgh !

    Tu peux utiliser MessageBox() alors, c'est quasiment la meme chose !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Ok, merci, j'ai fais tout ca, le message est assez obscure en fait ...

    " La classe existe déja " C'est la lasterror que j'obtiens..

    Ca a une signification pour toi ??

    Merci pour ton aide !!

  6. #6
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    tu peux donner un bout de code pour voir comment tu fais ? stp

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Ok, voila ce qu'il se passe qd je quitte mon IHM.

    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
    49
    50
    51
    52
    53
    54
    55
    56
    
    LPVOID lpMsgBuf;
    DWORD dwLastError;
     
    if(!TreeView_DeleteAllItems(treeViewFlux))
       printf("ca marche pas\n");
    
    SetCurrentDirectory("C:\\Documents and Settings\\imaj8504\\Desktop\\etherealplayer\\Debug\\etherealFiles");
     
    temp = threadNumber;
    
    //initialisationListeFlux();
    for(int i = 0; i < temp/*threadNumber*/; i++)
    {
      if(/*graphManager[i]*/ hThreads[i].graphManager!= NULL) 
       {
         /*graphManager[i]*/hThreads[i].graphManager->ClearGraph();
        delete hThreads[i].graphManager/*graphManager[i]*/;
        /*graphManager[i]*/hThreads[i].graphManager = NULL;
         printf("on est ds le for\n");
     
        if(!TerminateThread(hThreads[i].thread, 0))
         MessageBox(hwnd,"Impossible de terminer le thread",     Message",MB_ICONQUESTION);
     
    
        char nomFichier[260];
     
    
        if(!DeleteFile(hThreads[i].nomflux))
         {
             sprintf(nomFichier, "Impossible de supprimer le fichier %s", (hThreads[i].nomflux));
             MessageBox(hwnd,nomFichier, "Message",MB_ICONQUESTION);
         }
        else
       {
             MessageBox(hwnd,"Fichier supprimé", "Message",MB_ICONQUESTION);
             printf("on a supprimé %s\n", hThreads[i].nomflux);
         }
         dwLastError = GetLastError(); 
         FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    dwLastError,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    (LPTSTR) &lpMsgBuf,
    0, 
    NULL );
     
          MessageBox(hwnd,(LPCTSTR) lpMsgBuf, "Message",MB_ICONQUESTION);
          LocalFree(lpMsgBuf);
       }
    }
     
    DestroyWindow(hwnd);
    PostQuitMessage(0);
    return 0;
    

  8. #8
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    Je ne sais pas trop ce que veux dire ton message.
    Quelques remarques a ton code (pertinentes ou pas) :
    - tu arrêtes le thread et tu supprimes le fichier. peut être vaudrait mieux faire le contraire (les données du thread sont elle toujours pertinentes après l'arrêt de celui ci ?).

    - la gestion d'erreur est mal implémentée :
    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
    if ( !DeleteFile(hThreads[i].nomflux) )
    {
        FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
                               FORMAT_MESSAGE_FROM_SYSTEM,
                               NULL,
                               GetLastError(),
                               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                               (LPTSTR) &lpMsgBuf,
                               0,
                               NULL );
    
        printf("Impossible de supprimer le fichier %s\nCause : %s\n", 
                DeleteFile(hThreads[i].nomflux,
                lpMsgBuf);
    
        LocalFree(lpMsgBuf);
    }
    else
    {
        // ca a marché !
    }
    - peut être faut il tester l'existence du fichier avant de le supprimer.
    dans ce cas, utiliser la fonction _access(nomFic, 00) et tester le retour != 0. (voir MSDN ou FAQ).

    - méfie toi, ton buffer nomFichier est mal dimensionné à 260. Un nom de fichier avec son chemin peut facilement dépasser cette limite !

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    J'ai modifié mon code tu me l'a conseillé mais l'erreur reste la meme... Je ne comprens pas la raison...

    Pour ce qui et de _access, j'ai beau cherché, je ne la trouve pas dans MSDN, ni dans la FAQ... Il me dit identifier not found.. il faut un .h spécial ??

  10. #10
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    oui, io.h
    est ce qu'en debug, le nom du fichier est correct ????

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    c'est bon, j'ai testé la présence du fichier.. La reponse est oui !!! il est présent mais ne veut toujours pas s'effacer...

    La raison pourrais venir du fait que j'utilise la librairie pcap.h permettant de lire les fichiers au format libpcap... je pense qu'il reste pointé sur le fichier apres l'avoir utilisé... Un truc ds le genre...

    Maisje vois pas cmt modifier ca..

    Merci pour ton aide !!

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    J'ai trouvé la solution... tout venait de ma fonction traitant les fichiers libpcap...

    en fait, je fermais le fichier en utilisant la methode pcap_close au lieu d'utiliser pcap_dump_close. Le fichier n'était pas réellement fermé !!

    Tout s'explique donc !!!

    Merci encore pour ton aide, c'etait vraiment sympa de ta part !

    A biento pour le prochain probleme que je vois deja en train de montrer le bout de son nez:!!!

    Merci encore !

  13. #13
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    je ne connais pas cette lib, dsl...

    peut être peux tu déterminer si quelqu'un tient encore le fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if ( _access(nomFic, 2) == -1 )
    {
       switch(errno)
       {
       case EACCESS: /* on ne peut pas y accéder avec le mode spécifié ! */  break;
       case ENOENT:  /* fichier n'existe pas ! */ break;
       case EINVAL:  /* paramètre invalide ! */ break;
       }
    }
    lien sur la fonction :
    http://msdn2.microsoft.com/en-us/library/a2xs1dts(VS.80).aspx

    la dessus, je suis sec...

Discussions similaires

  1. Suppression impossible de fichiers
    Par cynoq dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 16/03/2009, 10h30
  2. Réponses: 7
    Dernier message: 16/12/2008, 12h22
  3. [DOM] Fichier en cours d'utilisation - Suppression impossible
    Par schniouf dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 15/12/2006, 13h58
  4. Suppression impossible d'un fichier avec unlink
    Par oli-ola dans le forum Langage
    Réponses: 11
    Dernier message: 04/01/2006, 13h58
  5. Réponses: 2
    Dernier message: 11/08/2003, 13h43

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