Probleme fopen (C)

Résolu/Fermé
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 - 16 févr. 2009 à 16:58
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 - 19 févr. 2009 à 21:19
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

18 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
16 févr. 2009 à 17:21
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
fichier = fopen("C:\\chemin\\test.txt", "r");
1
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
16 févr. 2009 à 17:11
poste ton code
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
16 févr. 2009 à 17:16
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;
}
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
16 févr. 2009 à 17:23
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 ...
0
Dans le programme je lis test.txt et non tests.txt !!!
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
16 févr. 2009 à 17:26
oui je sais mais j'ai corrigé dans mon code et ça n'a tjr pas marché
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
16 févr. 2009 à 17:30
essaye le chemin absolu
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
16 févr. 2009 à 17:32
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 ?
0
Si tu mets le chemin absolu comme l'a indiqué mype, le fichier doit être trouvé quelque soit l'endroit d'où on lance le programme et quelque soit l'endroit où se trouve le programme.
0
Par copier-coller, donne la ligne 'fichier = fopen...' avec le chemin absolu.
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
18 févr. 2009 à 11:18
fichier = fopen("C:\\Documents and Settings\\mon nom\\Bureau\\dossier antoine\\informatique\\programmation\\tests\Debug\\tests.txt", "r");
0
HACKER 712 Messages postés 1278 Date d'inscription lundi 15 décembre 2008 Statut Contributeur Dernière intervention 10 décembre 2009 255
18 févr. 2009 à 11:47
slt !


affiche le code on verra ce sui va pas !
0
HACKER 712 Messages postés 1278 Date d'inscription lundi 15 décembre 2008 Statut Contributeur Dernière intervention 10 décembre 2009 255
18 févr. 2009 à 12:23
Ah dsl il y a du avoir une erreur sur la page...
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
18 févr. 2009 à 11:51
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:!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 févr. 2009 à 12:00
Si ça t'affiche réussi, c'est qu'il est ouvert. Ouvert au sens programmation ne signifie pas que notepad ou autre va se lancer, mais que flux pointera bien sur le fichier. Et donc tu es prêt à lire le fichier avec des fgets ou autre.
Cdlt
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
18 févr. 2009 à 12:46
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.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 févr. 2009 à 13:27
Salut,
printf(buffer);
Vaut mieux :
printf("%s",buffer);
;)
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
18 févr. 2009 à 14:20
qu'est ce que ça change ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
18 févr. 2009 à 15:17
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.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
18 févr. 2009 à 16:31
Merci !C'est bon à sovoir
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 févr. 2009 à 13:28
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;
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
18 févr. 2009 à 18:07
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;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 févr. 2009 à 18:43
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;
}

0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
18 févr. 2009 à 18:47
ok mais la ça me fait echoueappuyez sur une touche pour continuer ... :(
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 févr. 2009 à 20:44
Si ça fait échouer c'est que ton pointeur fichier vaut NULL. Donc c'est à cause de fopen.
Vérifie bien le chemin.
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
19 févr. 2009 à 19:22
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 ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
19 févr. 2009 à 19:31
Non. Fopen te permet juste de d'initialiser le pointeur FILE* pour qu'il pointe sur le fichier. Ainsi tu pourras lire le fichier avec des fgets en passant en paramètre le descripteur.
Cela n'a rien avoir avec le fait de double cliquer sur un fichier en mode graphique sur ton OS.
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
19 févr. 2009 à 21:10
ah ... merci bcp en fait y'avait pas de probleme ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
19 févr. 2009 à 21:18
Non, c'est ce que Char Snipeur t'a dit dans son message 17. Et dans mon message 15 je t'avais déjà expliqué le sens d'open en sens programmation.
0
accroauC Messages postés 82 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 3 avril 2010 10
19 févr. 2009 à 21:19
merci de vos reponses j'avait rien compris
0