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 Discussion :

Effacer un fichier sous windows


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut Effacer un fichier sous windows
    Bonjour

    Je cherche à effacer un fichier, sous Linux, je n'ai aucun problème. Sous windows, ça n'efface rien
    J'ai bien regardé la FAQ : http://c.developpez.com/faq/?page=fi...ICHIERS_delete

    j'ai tout essayé, remove et DeleteFile pour en ariver à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     #ifdef __linux__
     remove(ch);
     #else
     DeleteFile(ch);
     #endif
    Pour info sous windows, ch ressemble à : .
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Des fois j'ai un peu de mal avec certaines fonctions.

    unlink ne correspond pas à ce que tu veux faire ?

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par fregolo52 Voir le message
    unlink ne correspond pas à ce que tu veux faire ?
    Pour windows ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Citation Envoyé par troumad Voir le message
    Pour windows ?
    Oui unlink existe sous Windows (dans stdio.h)
    Mais je ne garantis pas son effet.

    Sinon pour éviter les souci de double antislach, tu peux utiliser le slach :
    Ton chemin contient-il des espaces ?

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Oui, il y a des espaces. Ça commence par "C:\Documents and Setting\Troumad" !
    unlink est aussi sans effet
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #6
    Nouveau candidat au Club
    Inscrit en
    Août 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 2
    Par défaut
    essayez la fonction getLastErr sous Windows à verifer le résultat....
    peut-être le chemin du fichier est pas corret

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par cyberhero Voir le message
    essayez la fonction getLastErr sous Windows à verifer le résultat....
    peut-être le chemin du fichier est pas corret
    Je cherche et je ne vois pas trop comment l'utiliser !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #8
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Il faut tester le retour de DeleteFile() et s'il vaut 0, appeler GetLastError():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        if(DeleteFile(ch) == 0)
        {
            DWORD LastErr = GetLastError();
            printf("[-] Error DeleteFile(). Error code is: %#08lx (%d)", LastErr, LastErr);
        }
    Attention, DeleteFile() ne fonctionne pas (ce qui est normal) si le fichier est ouvert. Bien vérifier que le handle du fichier est fermé avant de tenter son effacement.

    c.f. la doc de DeleteFile() :

    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par Neitsa Voir le message
    Attention, DeleteFile() ne fonctionne pas (ce qui est normal) si le fichier est ouvert. Bien vérifier que le handle du fichier est fermé avant de tenter son effacement.
    « Normal », il faut le dire vite ! Sous UNIX, le fichier est retiré du catalogue du système de fichiers et est effectivement supprimé du disque lorsque le dernier handler est refermé. Parfois, ça pose d'autres problèmes (un fichier de log qui continue à grossir de manière invisible) mais au moins, plus personne ne peut référencer le fichier à nouveau s'il y a toujours un processus qui « tient la porte ouverte »…

  10. #10
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Je ne vois pas pourquoi ça marcherait avec DeleteFile si ça ne marche pas avec remove, qui ne fait grossièrement qu'appeler DeleteFile. J'afficherais donc dans un premier temps le message d'erreur retourné par remove :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int ret = remove(filename);
    if (ret != 0)
        perror(filename);
    Si le message d'erreur n'est pas satisfaisant, essayer avec DeleteFile et GetLastError :
    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
    BOOL success = DeleteFile(filename);
    if (!success)
    {
        DWORD dwErrorCode = GetLastError();
     
        /* Recuperer maintenant la description de l'erreur. */
     
        char lpBuffer[256];
        FormatMessage(
            FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL, dwErrorCode,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            lpBuffer, sizeof(lpBuffer) / sizeof(lpBuffer[0]), NULL
        );
    }

  11. #11
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par Neitsa Voir le message
    Attention, DeleteFile() ne fonctionne pas (ce qui est normal) si le fichier est ouvert. Bien vérifier que le handle du fichier est fermé avant de tenter son effacement.

    c.f. la doc de DeleteFile() :

    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
    Il a été ouvert et fermé de suite comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sprintf(ch,"%s%c%s.pers.lock",((char **)param)[CHEMIN],SEPARATEUR,((char **)param)[NOM]);
     fp = fopen(ch, "w");
     fprintf(fp,"%ld %p",(signed long)getpid(),((GtkWindow **)param)[FENETRE]);
     fclose(fp);
    Mais, quand je veux le supprimer manuellement j'ai une erreur : le message n'arrive plus !

    Le repas a du réparer le problème que je traine depuis hier soir...

    Ça vient de ce mettre à marcher quand j'ai voulu faire l'affichage de l'erreur ! Il va falloir que je regarde de plus près ce gag !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  12. #12
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Bientôt je comprendrais...

    Voici à nouveau l'erreur qui arrive quand je souhaite le supprimer manuellement via l'explorateur de fichier :
    Impossible de supprimer Jounelle.pers : cette ressource est utilisée par une autre personne ou un autre programme.
    Fermez les programmes susceptibles d'utiliser le fichier et essayez à nouveau.
    [OK]
    La surprise, c'est que c'est le fichier Jounelle.pers.lock que je tente d'effacer ! Bientôt pour la suite...
    Jounelle.pers est ouvert par : g-file-get-contents . Si la fonction est bien faîte, il doit être fermé de suite !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Partage de fichiers sous Windows
    Par Brindavoine dans le forum Développement
    Réponses: 7
    Dernier message: 06/06/2007, 14h28
  2. date de modification de fichier sous windows
    Par brisbo dans le forum Windows
    Réponses: 2
    Dernier message: 04/05/2006, 23h45
  3. gestion de fichier sous windows en posix
    Par fan² dans le forum Réseau
    Réponses: 11
    Dernier message: 07/12/2005, 18h40
  4. Changer les droits d'un fichier sous windows
    Par lnikolanta dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 26/09/2005, 17h03

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