Problème existentiel de fichier

Gotscha Messages postés 4 Date d'inscription vendredi 17 août 2007 Statut Membre Dernière intervention 14 janvier 2008 - 12 déc. 2007 à 10:26
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 12 déc. 2007 à 16:09
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 déc. 2007 à 10:33
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++
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 déc. 2007 à 16:09
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
0
Rejoignez-nous