Problème existentiel de fichier

Signaler
Messages postés
4
Date d'inscription
vendredi 17 août 2007
Statut
Membre
Dernière intervention
14 janvier 2008
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour,

J'ai regardé sur le forum : il y a beaucoup de demande pour connaître si un fichier existe. Je travaille en C et j'aimerai savoir si mon fichier (autrement dit son nom qui se situe dans la variable fichierChoisi) existe ou non.
J'ai essayé ceci :
<hr size="2" width="100%" />char* fichierChoisi;
  printf("?> Quel Fichier ?\n");
  scanf("%s",&fichierChoisi);
  // On test si le fichier choisi existe
  FILE* testFile = fopen(fichierChoisi, "r");
  while (testFile == NULL){
    // le fichier n'existe donc pas
    printf("?> Quel Fichier ?\n");
    scanf("%s",&fichierChoisi);
    testFile = fopen(fichierChoisi, "r");
  }
<hr size="2" width="100%" />mais ça ne fonctionne pas car lorsque je choisi le fichier jojo.txt, la boucle se lance alors que le fichier existe vraiment !

Merci de votre aide, car j'ai l'impression de butter contre une érreur un peu stupide... et ça dure depuis trop longtemps.

2 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Quand on travaille en C on ne déclare pas ses variables nimporte où dans le code mais au début.

Pour la Xeme fois, un fichier peut exister et ne pas pouvoir être ouvert s'il l'a déjà été en mode exclusif.

ciao...
BruNews, MVP VC++
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,


Bon alors en plus des remarques précédentes...


1 Un while n'est pas ce qu'il y a de mieux ici. On voit bien le code
redondant (printf, scanf, fopen...). Un do ... while est plus approprié.


2 fichierChoisi est un pointeur sur des caractères. Tu passes son
adresse en argument au scanf... Bilan scanf écrit bien tranquillement à
l'emplacement de ton pointeur... Alors
après il y a peut être des compilo qui acceptent ce genre de truc, mais
il me semble qu'il faut préciser %as, et pas %s. Mais peut être que je
me trompe. Par contre, il y a une syntaxe plus courante : préciser la
taille du buffer. Suffit de la mettre en le % et le s.


#include "stdio.h"


int main(int argc, char ** argv)

{

  FILE* testFile;

  char fichierChoisi[100];


  do {

    printf("?> Quel fichier ?\n");

    scanf("%100s", fichierChoisi);

    testFile = fopen(fichierChoisi, "r");

  } while (!testFile);

 

  fclose(testFile);

  return 0;

}

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08