Probleme fopen (C)
Résolu
accroauC
Messages postés
82
Date d'inscription
Statut
Membre
Dernière intervention
-
accroauC Messages postés 82 Date d'inscription Statut Membre Dernière intervention -
accroauC Messages postés 82 Date d'inscription Statut Membre Dernière intervention -
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
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 complet
tu es sur que le fichier texte est dans le meme repertoire que l'executable ?
tu peux essayer en passant le chemin complet
fichier = 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;
}
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.
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 ...
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 ?
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
#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:!
#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.
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.
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;
}
#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 :
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; }
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 ?
mais fopen permet d'ouvrir un fichier ? de le voir comme si je l'ouvrais normalement ?