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 :

Comment savoir si un fichier (texte) existe ?


Sujet :

C++

  1. #1
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut Comment savoir si un fichier (texte) existe ?
    Bonjour à tous,

    Je travaille sur Windows XP Pro SP3 avec Visual C++ 6.0 ...

    J'ai regardé dans la FAQ et je suis tombé sur un code très intéressant à ce lien : http://cpp.developpez.com/faq/vc/ind...iers#FileExist

    Voici le code :

    Avec la fonction _access :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int _access( const char *path, int mode );
    Valeurs pour mode :
    # 00 : test de l'existence uniquement
    # 02 : permission d'écriture
    # 04 : permission lecture
    # 06 : permission lecture / écriture

    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
    #include <io.h>
    #include <errno.h>
     
    //test si fichier existe
    if((_access( "troll.c", 0 )) != -1 )
    {
       printf( "Fichier troll.c existe\n" );
       // Pour permission d'écriture
       if( (_access( " troll.c ", 2 )) != -1 )
           printf( "le Fichier troll.c est ok pour l'écriture\n" );
    }
    else
    {
         switch(errno)
         {
             case EACCES :printf("accès interdit\n ");
                                     break;
            case  ENOENT:printf("fichier ou chemin incorrect \n") ;
                                      break ;
          }
    }
    Ce que je cherche à faire avec ce code, c'est l'exécuter lorsque je clic sur un bouton présent sur un dialog.

    J'ai donc ce code là (par défaut) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void TTest::OnExport() 
    {
    	// TODO: Add your control notification handler code here	
    }
    Je ne comprends pas vraiment comment intégrer le code de la FAQ dans mon code présent pour mon bouton ...

    Voici mes suppositions .

    La ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int _access( const char *path, int mode );
    appelle la fonction : access

    Donc je devrais mettre que la ligne ci-dessus dans le code de mon bouton et puis en dessous du code pour le bouton je devrais mettre la suite ? ... ...

    Merci de votre aide et de votre compréhension (je débute vraiment ... jusqu'à y a 1 semaine je n'avais jamais vu un code en C++) ...

  2. #2
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Je suis en train d'avancer à petit pas ...

    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void TTest::OnExport() 
    {
    	// TODO: Add your control notification handler code here
     
    	//test si fichier existe
    	if((_access( "C:\README.TXT", 0 )) != -1 )
    	{
    	   AfxMessageBox("Différent de 1 - Fichier présent", MB_OK); 
    	}
    	else
    	{
    		AfxMessageBox("Egale -1 - Fichier non présent", MB_OK); 
    	}
    }
    Lorsque j'exécute mon code, je n'ai pas d'erreur (c'est déjà ça) et lorsque je clique sur mon bouton pour contrôler si le fichier existe ou pas j'obtiens toujours la même chose ...

    En effet, que mon fichier soit là ou pas ... (_access( "C:\README.TXT", 0 ) = toujours 0 ...

    Est-ce que vous savez pourquoi ? ... Merci pour votre aide ...

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par snoopy69 Voir le message
    Est-ce que vous savez pourquoi ?
    Parce que tu n'as pas pris en compte le warning que tu as eu à la compilation. Il aurait du te faire réfléchir et trouver ton bug

  4. #4
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Parce que tu n'as pas pris en compte le warning que tu as eu à la compilation. Il aurait du te faire réfléchir et trouver ton bug


    Bonjour et merci de ta réponse ...

    Je n'ai pas de "Warning" lorsque je lance mon code ... ... ... je devrais en avoir ? ... ...

    Je débute vraiment ... ... ... ... ... ... et j'ai un peu de mal ...

    En début de code (en haut de mon fichier CPP) j'ai mis les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include  <io.h>
    #include  <stdio.h>
    #include  <stdlib.h>
    J'avais oublié de le préciser ...

    Merci vraiment pour l'aide ... ...

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Si tu as posté le même code que tu as, tu devrais avoir un warning à la compilation.

    [EDIT] Voilà ce qui m'a sauté aux yeux "C:\README.TXT"
    A la compilation, tu as du avoir : warning C4129: 'R' : unrecognized character escape sequence (visual) ou warning: unknown escape sequence '\R' (gcc) ou quelque chose de semblable avec un autre compilateur.
    Le caractère \ sert à insérer des caractères spéciaux dans les chaînes de caractère. Par exemple \t sert à insérer une tabulation. La question est comment insérer '\' dans ma chaîne alors ? Il suffit de l'échapper avec lui-même : '\\'. Donc ta chaîne devrait être : "C:\\README.TXT"

  6. #6
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Par exemple ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    warning C4129: 'R' : unrecognized character escape sequence
    Generating Code...
    ???

    Qui vient de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((_access( "C:\README.TXT", 0 )) != -1 )
    ???

    Alors ... si je modifie mon code comme suit :
    void TTest::OnExport()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {
    	// TODO: Add your control notification handler code here
    	
    	//test si fichier existe
    	if((_access( "README.TXT", 0 )) != -1 )
    	{
    	   AfxMessageBox("Différent de 1 - Fichier présent", MB_OK); 
    	}
    	else
    	{
    		AfxMessageBox("Egale -1 - Fichier non présent", MB_OK); 
    	}
    }
    cela fonctionne ... ...

    Mais ce que je cherche à faire en faite c'est savoir si un fichier existe A UN CHEMIN SPECIFIE ...

    Par exemple j'aimerais savoir si à ce chemin : "C:\" le fichier "text.txt" existe ... ... ...

    Est-ce que c'est possible ... ??? ...

    Pourrais-tu éventuellement m'aiguiller un peu ? ... Merci beaucoup de ton aide ...

  7. #7
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Relis ce que 3DArchi t'a écrit plus haut => doublement de l'antislash ( \\ )

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par snoopy69 Voir le message
    Par exemple ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    warning C4129: 'R' : unrecognized character escape sequence
    Generating Code...
    ???

    Ne jamais négligé les warning lors d'une compilation... Idéalement, tu ne devrais pas en avoir.
    Citation Envoyé par snoopy69 Voir le message
    Pourrais-tu éventuellement m'aiguiller un peu ? ... Merci beaucoup de ton aide ...
    Citation Envoyé par Trunks Voir le message
    Relis ce que 3DArchi t'a écrit plus haut => doublement de l'antislash ( \\ )
    Effectivement, j'avais entre temps éditer mon message précédent : _access( "C:\\README.TXT", 0 ))

  9. #9
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Au passage, change de compilateur (si tu peux), VC 6.0 est vraiment dépassé.

  10. #10
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Bonjour à tous,

    Un grand merci pour votre aide ...

    Tout fonctionne à merveille ... C'est super ... ...

    En réponse à poukill :
    Au passage, change de compilateur (si tu peux), VC 6.0 est vraiment dépassé.
    J'aimerais bien ... ... mais j'ai pas le choix ... ... c'est ce que doit utiliser au boulot ... et personne ne veut migrer ... ... ...


    Code final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void TTest::OnExport() 
    {
    	// Test si fichier existe 
    	if((_access( "c:\\README.TXT", 0 )) != -1 )
    	{
               // Affichage d'un message si le fichier existe
    	   AfxMessageBox("Différent de 1 - Fichier présent", MB_OK); 
    	}
    	else
    	{
               // Affichage d'un message si le fichier n'existe pas
    	   AfxMessageBox("Egale -1 - Fichier non présent", MB_OK); 
    	}
    }
    Que fait ce code :
    Le code est exécuté sur clic d'un bouton et il affiche un message pour savoir si un fichier existe ou n'existe pas. Dans notre cas il va regarder si le fichier README.TXT existe à ce chemin : "C:\README.TXT".


    Voili ... encore merci à tous pour votre aide ...

  11. #11
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par snoopy69 Voir le message
    En réponse à poukill :

    J'aimerais bien ... ... mais j'ai pas le choix ... ... c'est ce que doit utiliser au boulot ... et personne ne veut migrer ... ... ...
    C'est une réponse valable...
    Tant que tu touches pas trop aux template, ça va, car c'est pas bien supporté par VC6. La STL fourni avec est buggée au passage!

    Bonne continuation,

    Poukill

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/06/2011, 16h50
  2. Comment savoir si un fichier existe sur une page web ?
    Par arketip dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 08/04/2008, 02h13
  3. Comment savoir si un fichier existe en C
    Par sympho dans le forum Linux
    Réponses: 3
    Dernier message: 16/12/2005, 06h35
  4. Comment imprimer un fichier text existant?
    Par AODRENN dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2005, 17h26
  5. Réponses: 4
    Dernier message: 16/08/2003, 13h21

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