[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
Bonjour,

Je travaille actuellement à l'élaboration d'un programme en C me permettant d'ouvrir un fichier et d'y effectuer des modifications. Mais je rencontre un problème actuellement, lors de l'ouverture du fichier, je ne sais pas pourquoi il est vide alors que je l'ai rempli avant d'exécuter mon code. Pouvez-vous m'aider?

Voici mon code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAILLE_MAX 1000

//---------------------------------------------------functions---------------------------------------------------------------------------------
//---------------------------------------------------function ouverture fichier----------------------------------------------------------------
FILE * open_file(char * nom_fic){
FILE * fic = fopen(nom_fic, "w+");
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;
}

//---------------------------------------------------function 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);
}

//---------------------------------------------------function 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;
}
}
}

//---------------------------------------------------function ecriture dans un fichier-------------------------------------------------------
void write_file(FILE * fic, char ecriture[255]){
fprintf(fic,"%s", ecriture);
}

//---------------------------------------------------function comptage ligne fichier---------------------------------------------------------
int nb_ligne(){
FILE *f;
int nb_ligne;
system("wc -l test.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;
}

//---------------------------------------------------function main-----------------------------------------------------------------------------
void seek_file(){

}

//---------------------------------------------------function main-----------------------------------------------------------------------------
void delete_ligne(){

}

//---------------------------------------------------function main-----------------------------------------------------------------------------
int main(int argc, char *argv[])
{
FILE *fichier = NULL;
char nom_fichier[] = "test.txt";
char message[] = "flag=0";
char * lecture;
int nb_lignes;

//ouverture du fichier
fichier = open_file(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);
}

/*if(lecture == "flag=1"){

printf("le flag est activé donc maj de la base de données");

//deplacement du curseur au debut du fichier
fseek(fichier, 0, SEEK_SET);

//ecriture dans le fichier
write_file(fichier,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;
}

Je tiens à préciser que je travaille sous ubuntu

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
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.
0
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
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"
0
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
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?
0
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
à 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
0

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
c'est normal, tu compare des pointeurs, pour les chaines de caractères c'est strcmp !
0