Probleme fopen (C)
Résolu
accroauC
Messages postés
93
Statut
Membre
-
accroauC Messages postés 93 Statut Membre -
accroauC Messages postés 93 Statut Membre -
Bonjour, je n'arrive pas à ouvrir un fichier avecfopen.
je suis le tuto C du site du zero (https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/16421-lire-et-ecrire-dans-des-fichiers
Mon fichier tests.txt est dans le dossier Degug ou se trouve mon prog (tests.txt) .
J'ai Visual Basic C++ express edition
Merci de vos reponses
je suis le tuto C du site du zero (https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/16421-lire-et-ecrire-dans-des-fichiers
Mon fichier tests.txt est dans le dossier Degug ou se trouve mon prog (tests.txt) .
J'ai Visual Basic C++ express edition
Merci de vos reponses
Configuration: Windows XP Internet Explorer 7.0 Visual Basic C++ express edition
18 réponses
-
le code a l'air correct...
tu es sur que le fichier texte est dans le meme repertoire que l'executable ?
tu peux essayer en passant le chemin completfichier = fopen("C:\\chemin\\test.txt", "r"); -
-
ah oui excuse moi j'ai oublié
mon code:
tests.h
je ne sais pas ceque je dois mettre
main.c
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("test.txt", "r");
if(fichier != NULL)
{ printf("reussi");
}
else
{ printf("echoue");
}
system("pause");
return 0;
} -
Oh si la fonction 'fopen' ne fonctionnait pas correctement... il y a longtemps que cela se saurait! Donc elle fonctionne.
Si tu n'as pas le résultat escompté, 3 solutions:
1) le mode d'ouverture choisi n'est pas correct,
2) tu n'as pas les droits corrects sur le fichier,
3) le fichier ne se trouve pas au bon endroit (essaye en mettant un chemin absolu).
Tu aurais pu au moins joindre la ligne en défaut, on aurait peut-être eu une autre idée. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
j'ai créé le fichier tests.txt avec le bloc notes donc ça doit pas etre les droits, j'ai essayé r et r+, j'ai essayé avec le chemin absolu ...
-
oui je sais mais j'ai corrigé dans mon code et ça n'a tjr pas marché
-
le chemin absolu ne marche pas non plus ...
Par contre j'ai peut etre une piste : mon IDE n'est pas dans progammes files mais dans mon dossier, mes programmes créés ne sont pas dans"objets" ça pourrait etre ça ? -
fichier = fopen("C:\\Documents and Settings\\mon nom\\Bureau\\dossier antoine\\informatique\\programmation\\tests\Debug\\tests.txt", "r");
-
slt !
affiche le code on verra ce sui va pas ! -
slt
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("C:\\Documents and Settings\\mon nom\\Bureau\\dossier antoine\\informatique\\programmation\\tests\Debug\\tests.txt", "r+");
if(fichier != NULL)
{ printf("reussi");
}
else
{ printf("echoue");
}
system("pause");
return 0;
}
et ça me fait reussi mais le fichier n'est pas ouvert:! -
Tout ce temps pour résoudre un non-problème. Comme quoi, il faut toujours être précis dans la description des problèmes.
juste pour afficher, ajoute cette boucle après reussi :
char buffer[512];
while(fichier!=EOF)
{
fscanf(fichier,"%s",buffer);
printf(buffer);
}
fclose(fichier);
ne pas oublier de fermer le fichier à la fin, c'est plus propre.-
- Cela rend possible la faille String.
Lorsque tu fais printf(buffer), si buffer contient des %x, tu vas faire afficher le code hexa des données de la pile en la descendant. Et en utilisant %x et %n astucieusement tu vas pouvoir modifier l'adresse de retour et donc pourquoi pas exécuter un shellcode.
Le printf("%s",buffer); rend impossible cette attaque.
-
-
Si tu veux lire dans un fichier, tu peux aussi utiliser fgets (plus sécurisé) :
char buffer[512]; while(fgets(buffer,sizeof buffer,fp)!=NULL) printf("%s",buffer); fflush(stdout); fclose(fichier),fichier=NULL; -
comme ça ?
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
char buffer[512];
int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("C:\\Documents and Settings\\moi\\Bureau\\dossier antoine\\1nf0rm4t1k\\programmation\\tests\Debug\\tests.txt", "r+");
if(fichier != NULL)
{ printf("reussi");
while(fichier!=EOF)
{
fscanf(fichier,"%s",buffer);
printf(buffer);
}
fclose(fichier);
}
else
{ printf("echoue");
}
system("pause");
return 0;
} -
Salut,
Plutôt comme ça :#include <stdio.h> #include <stdlib.h> #include "test.h" int main(int argc, char *argv[]) { FILE* fichier = fopen("C:\\Documents and Settings\\moi\\Bureau\\dossier antoine\\1nf0rm4t1k\\programmation\\tests\Debug\\tests.txt", "r+"); if(fichier != NULL) { char buffer[512]; printf("reussi"); while(fgets(buffer,sizeof buffer,fichier)!=NULL) { printf("%s",buffer); } fclose(fichier),fichier=NULL; } else { printf("echoue"); } system("pause"); return 0; } -
ok mais la ça me fait echoueappuyez sur une touche pour continuer ... :(
-
non en fait il manquait un antislash! maintenant il y a une nette amelioration : reussiappuyez sur une touche ... :/
mais fopen permet d'ouvrir un fichier ? de le voir comme si je l'ouvrais normalement ? -
-