[langage C] fichier ouvert vide
Résolu/Fermé
kristof789
Messages postés
17
Date d'inscription
vendredi 20 avril 2012
Statut
Membre
Dernière intervention
6 juin 2012
-
Modifié par kristof789 le 15/05/2012 à 16:06
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 16 mai 2012 à 11:16
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 16 mai 2012 à 11:16
A voir également:
- [langage C] fichier ouvert vide
- Fichier rar - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
5 réponses
kristof789
Messages postés
17
Date d'inscription
vendredi 20 avril 2012
Statut
Membre
Dernière intervention
6 juin 2012
15 mai 2012 à 16:23
15 mai 2012 à 16:23
je viens de trouver le problème.
Cela est du au fait que j'ai mis "w+" ici => FILE * fic = fopen(nom_fic, "w+");
En mettant "wr", je n'ai plus ce problème.
Cela est du au fait que j'ai mis "w+" ici => FILE * fic = fopen(nom_fic, "w+");
En mettant "wr", je n'ai plus ce problème.
linkcr15
Messages postés
362
Date d'inscription
mercredi 7 janvier 2009
Statut
Membre
Dernière intervention
31 mars 2016
12
15 mai 2012 à 16:27
15 mai 2012 à 16:27
J'allais te le dire^^
En fait tu as ouvert ton fichier en écriture (FILE * fic = fopen(nom_fic, "w+") où w signifie écriture), donc quand tu exécutes ta fonction de lecture du fichier, et bien le programme ne peut pas le lire car tu n'as que le droit d'écrire dedans.
Donc : - Si tu veux écrire dedans : utilise "w"
- Si tu veux le lire : utilise "r"
- Si tu veux lire et écrire : utilise "wr"
En fait tu as ouvert ton fichier en écriture (FILE * fic = fopen(nom_fic, "w+") où w signifie écriture), donc quand tu exécutes ta fonction de lecture du fichier, et bien le programme ne peut pas le lire car tu n'as que le droit d'écrire dedans.
Donc : - Si tu veux écrire dedans : utilise "w"
- Si tu veux le lire : utilise "r"
- Si tu veux lire et écrire : utilise "wr"
kristof789
Messages postés
17
Date d'inscription
vendredi 20 avril 2012
Statut
Membre
Dernière intervention
6 juin 2012
16 mai 2012 à 10:34
16 mai 2012 à 10:34
Merci pour ta réponse :)
j'ai encore un autre soucis.
voici mon programme :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAILLE_MAX 1000
//---------------------------------------------------fonctions---------------------------------------------------------------------------------
//---------------------------------------------------fonction ouverture fichier----------------------------------------------------------------
FILE * open_file_read(char * nom_fic){
FILE * fic = fopen(nom_fic, "rw");
if(fic == NULL){
printf("Impossible d'ouvrir le fichier %s\n", nom_fic);
exit(1);
}
printf(".............. Ouverture du fichier %s\n", nom_fic);
return fic;
}
//---------------------------------------------------fonction fermeture fichier---------------------------------------------------------------
void close_file(char * nom_fic, FILE * fic){
if(fclose(fic) == EOF){
printf("Probleme de fermeture du fichier %s\n", nom_fic);
exit(1);
}
printf(".............. Fermeture du fichier %s\n", nom_fic);
}
//---------------------------------------------------fonction lecture fichier----------------------------------------------------------------
char * read_file(FILE * fic){
char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
if (fic != NULL)
{
while (fgets(chaine, TAILLE_MAX, fic)!= NULL){ // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
return chaine;
}
}
}
//---------------------------------------------------fonction ecriture dans un fichier-------------------------------------------------------
void write_file(FILE * fic, char * ecriture){
fputs(ecriture,fic);
}
//---------------------------------------------------fonction comptage lignes fichier---------------------------------------------------------
int nb_ligne(){
FILE *f;
int nb_ligne;
system("wc -l flag.txt > tmp" );
f = fopen("tmp","rw" );
fscanf(f,"%d",&nb_ligne);
printf("le nombre de lignes du fichier est de %d lignes\n",nb_ligne);
return nb_ligne;
}
//---------------------------------------------------fonction main-----------------------------------------------------------------------------
int main(int argc, char *argv[])
{
FILE * fichier = NULL;
char * nom_fichier = "flag.txt";
FILE * fichier_b = NULL;
char * message = "flag=0";
char * flag = "flag=1";
char * lecture;
int nb_lignes;
//ouverture du fichier
fichier = open_file_read(nom_fichier);
//nombre de ligne
nb_lignes = nb_ligne();
if(nb_lignes == 0)
printf("le fichier est vide\n");
//lecture du fichier
for (int i=0;i < nb_lignes;i++){
lecture = read_file(fichier);
printf("%s",lecture);
}
printf("la valeur de la variable lecture est : %s",lecture);
printf("la valeur de la variable flag est : %s\n",flag);
if(lecture == flag){
printf("le flag est activé donc maj de la base de données\n");
//deplacement du curseur au debut du fichier
//fseek(fichier, 0, SEEK_SET);
//ecriture dans le fichier
write_file(fichier_b,message);
}
else{
printf("le flag n'est pas activée donc aucune connexion au site \n");
}
//fermeture du fichier
close_file(nom_fichier,fichier);
return 0;
}
En effectuant mon "if(lecture == flag){", la condition n'est pas valide, pourtant j'ai bien lecture = "flag=1" et flag = "flag=1" donc je ne comprend pas...... si quelqu'un peut m'aider?
j'ai encore un autre soucis.
voici mon programme :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAILLE_MAX 1000
//---------------------------------------------------fonctions---------------------------------------------------------------------------------
//---------------------------------------------------fonction ouverture fichier----------------------------------------------------------------
FILE * open_file_read(char * nom_fic){
FILE * fic = fopen(nom_fic, "rw");
if(fic == NULL){
printf("Impossible d'ouvrir le fichier %s\n", nom_fic);
exit(1);
}
printf(".............. Ouverture du fichier %s\n", nom_fic);
return fic;
}
//---------------------------------------------------fonction fermeture fichier---------------------------------------------------------------
void close_file(char * nom_fic, FILE * fic){
if(fclose(fic) == EOF){
printf("Probleme de fermeture du fichier %s\n", nom_fic);
exit(1);
}
printf(".............. Fermeture du fichier %s\n", nom_fic);
}
//---------------------------------------------------fonction lecture fichier----------------------------------------------------------------
char * read_file(FILE * fic){
char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
if (fic != NULL)
{
while (fgets(chaine, TAILLE_MAX, fic)!= NULL){ // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
return chaine;
}
}
}
//---------------------------------------------------fonction ecriture dans un fichier-------------------------------------------------------
void write_file(FILE * fic, char * ecriture){
fputs(ecriture,fic);
}
//---------------------------------------------------fonction comptage lignes fichier---------------------------------------------------------
int nb_ligne(){
FILE *f;
int nb_ligne;
system("wc -l flag.txt > tmp" );
f = fopen("tmp","rw" );
fscanf(f,"%d",&nb_ligne);
printf("le nombre de lignes du fichier est de %d lignes\n",nb_ligne);
return nb_ligne;
}
//---------------------------------------------------fonction main-----------------------------------------------------------------------------
int main(int argc, char *argv[])
{
FILE * fichier = NULL;
char * nom_fichier = "flag.txt";
FILE * fichier_b = NULL;
char * message = "flag=0";
char * flag = "flag=1";
char * lecture;
int nb_lignes;
//ouverture du fichier
fichier = open_file_read(nom_fichier);
//nombre de ligne
nb_lignes = nb_ligne();
if(nb_lignes == 0)
printf("le fichier est vide\n");
//lecture du fichier
for (int i=0;i < nb_lignes;i++){
lecture = read_file(fichier);
printf("%s",lecture);
}
printf("la valeur de la variable lecture est : %s",lecture);
printf("la valeur de la variable flag est : %s\n",flag);
if(lecture == flag){
printf("le flag est activé donc maj de la base de données\n");
//deplacement du curseur au debut du fichier
//fseek(fichier, 0, SEEK_SET);
//ecriture dans le fichier
write_file(fichier_b,message);
}
else{
printf("le flag n'est pas activée donc aucune connexion au site \n");
}
//fermeture du fichier
close_file(nom_fichier,fichier);
return 0;
}
En effectuant mon "if(lecture == flag){", la condition n'est pas valide, pourtant j'ai bien lecture = "flag=1" et flag = "flag=1" donc je ne comprend pas...... si quelqu'un peut m'aider?
kristof789
Messages postés
17
Date d'inscription
vendredi 20 avril 2012
Statut
Membre
Dernière intervention
6 juin 2012
16 mai 2012 à 11:14
16 mai 2012 à 11:14
à chaque fois je post, je trouve la réponse mais j'ai une autre erreur:
quand j'utilise cette fonction:
void write_file(FILE * fic, char * ecriture){
fputs(ecriture,fic);
}
J'ai une erreur de segmentation quelqu'un pourrait il m'aider?
Cordialement
quand j'utilise cette fonction:
void write_file(FILE * fic, char * ecriture){
fputs(ecriture,fic);
}
J'ai une erreur de segmentation quelqu'un pourrait il m'aider?
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
16 mai 2012 à 11:16
16 mai 2012 à 11:16
c'est normal, tu compare des pointeurs, pour les chaines de caractères c'est strcmp !