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   -
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   Statut Membre Dernière intervention   437
 
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   Statut Membre Dernière intervention   437
 
poste ton code
0
accroauC Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   10
 
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
loupius
 
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   Statut Membre Dernière intervention   10
 
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
loupius
 
Dans le programme je lis test.txt et non tests.txt !!!
0
accroauC Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   10
 
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   Statut Membre Dernière intervention   437
 
essaye le chemin absolu
0
accroauC Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   10
 
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
loupius
 
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
loupius
 
Par copier-coller, donne la ligne 'fichier = fopen...' avec le chemin absolu.
0
accroauC Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   10
 
fichier = fopen("C:\\Documents and Settings\\mon nom\\Bureau\\dossier antoine\\informatique\\programmation\\tests\Debug\\tests.txt", "r");
0
HACKER 712 Messages postés 1282 Date d'inscription   Statut Contributeur Dernière intervention   255
 
slt !


affiche le code on verra ce sui va pas !
0
HACKER 712 Messages postés 1282 Date d'inscription   Statut Contributeur Dernière intervention   255
 
Ah dsl il y a du avoir une erreur sur la page...
0
accroauC Messages postés 82 Date d'inscription   Statut Membre Dernière intervention   10
 
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   Statut Contributeur Dernière intervention   1 846
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Contributeur Dernière intervention   1 846
 
Salut,
printf(buffer);
Vaut mieux :
printf("%s",buffer);
;)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
qu'est ce que ça change ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci !C'est bon à sovoir
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   10
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   10
 
ok mais la ça me fait echoueappuyez sur une touche pour continuer ... :(
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   10
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   10
 
ah ... merci bcp en fait y'avait pas de probleme ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   10
 
merci de vos reponses j'avait rien compris
0