Gotscha
Messages postés4Date d'inscriptionvendredi 17 août 2007StatutMembreDernière intervention14 janvier 2008
-
12 déc. 2007 à 10:26
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDerniè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.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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