[langage C] fichier ouvert vide
Résolu
kristof789
Messages postés
21
Statut
Membre
-
Char Snipeur Messages postés 10112 Statut Contributeur -
Char Snipeur Messages postés 10112 Statut Contributeur -
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
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
A voir également:
- [langage C] fichier ouvert vide
- Fichier bin - Guide
- Fichier epub - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
5 réponses
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.
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"
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?
à 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