Pb avec fread et fwrite

[Résolu]
Signaler
Messages postés
65
Date d'inscription
vendredi 10 février 2006
Statut
Membre
Dernière intervention
21 octobre 2009
-
Messages postés
14
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
30 octobre 2006
-
Boujour. Voila le probléme. Lorsque j'essaye d'ecrire des donnés avec fwrite(), Windows marque "Erreur, Windows ...".
Voici le bout de code :
char data[] = "C:/Ulm/Data.txt";


/*Déclaration des fonction*/


main ()
{ if (ux fopen (data, "ab") NULL)
{
printf ("\nSysteme non operationnelle.");
printf ("\nFin du logiciel : Data.txt inexistant");
sleep (100);
exit (1);
}
else
{
printf ("\nSysteme opperationnelle");
sleep (1000);
}
if (code = fread (&code,sizeof(int),1, ux) != 1)
{
printf ("\nChargement");
}
if (code = fwrite (&code, sizeof(int), 1, ux) != 1)
{
printf ("\nEchec");
}

Quelqu'un pourait m'aider, svp.

5 réponses

Messages postés
14
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
30 octobre 2006

C'est on ne peut plus normal... Lorsque qu'on fait code = fwrite (...); ou code = fread (...); on affecte le résultat des fonctions à code. Ce résultat vaut probablement le nombre de caractères écrits par fwrite ou 0 en cas d'erreur; il faut voir ça dans la doc de ces f°. Mais l'erreur doit venir de ces affectations qui modifient la valeur de code dès l'appel à fwrite (&code,2,1,verif); Une autre variable peut remplacer code pour cette tâche!

sten
ka
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
T'es if pourrais cosé problème essais

ux = fopen (data, "ab"));

if (ux == NULL)
{
printf ("\nSysteme non operationnelle.");
printf ("\nFin du logiciel : Data.txt inexistant");
sleep (100);
exit (1);
}
else
{
printf ("\nSysteme opperationnelle");
sleep (1000);
}

code = fread (&code,sizeof(int),1, ux);

if (code != 1)
{
printf ("\nChargement");
}

code = fwrite (&code, sizeof(int), 1, ux);
if (code != 1)
{
printf ("\nEchec");
}

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
14
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
30 octobre 2006

Voici un bel exemple commenté de lecture/écriture dans des fichiers avec fread et fwrite... (Dev-Cpp)

#include <stdio.h>


/* DECLARATIONS DES VARIABLES */


char fDep[260]; /* adresse et nom du fichier que l'on veut copier */
char fArr[260]; /* adresse et nom du fichier dans lequel on va faire
la copie */
char fTmp[260]; /* chaîne de caractère temporaire */
FILE *FDEP; /* pointeur de type FILE */
FILE *FARR; /* pointeur de type FILE */
char ch[1]; /* tableau temporaire de 1 caractère */
int i; /* variable temporaire */


/* LA FONCTION APPELEE AU DEMARRAGE DE L'EXECUTABLE */
int main()
{
/* FICHIER QU'IL FAUT COPIER */
printf("Taper le nom avec extension du fichier que vous desirez copier\n");
printf("Ce fichier doit se trouver dans le repertoire de l'executable\n");
scanf("%s",fTmp); /* saisie du nom du fichier à lire */
strcpy(fDep,".\"); /* début de l'adresse relative */
strcat(fDep,fTmp); /* ajout du nom à l'adresse relative */


/* FICHIER DANS LEQUEL ON VA ECRIRE */
strcpy(fArr,".\"); /* début de l'adresse relative */
strcat(fArr,"fcopy"); /* ajout de fcopy avant le nom du fichier */
strcat(fArr,fTmp); /* ajout du nom du fichier */

/* OUVERTURE DES DEUX FICHIERS */
FDEP = fopen(fDep,"r"); /* ouverture en lecture seule de fDep */
FARR = fopen(fArr,"w"); /* ouverture en écriture seule de fArr */

do
{
i = fread(ch,1,1,FDEP); /* lire 1 caractère du fichier */
if (i > 0) /* si 1 caractère à été lu */
fwrite(ch,1,1,FARR); /* écrire ce caractère dans le nouveau
fichier */
}while (i > 0); /* tant qu'on lit 1 caractère on retourne à
i = fread(ch,1,1,FDEP); */

close(FDEP);
close(FARR);

system("pause"); /* affiche "Appuier sur une touche pour continuer ..." */
return 0; /* le programme se termine correctement */
}


sten
ka
Messages postés
65
Date d'inscription
vendredi 10 février 2006
Statut
Membre
Dernière intervention
21 octobre 2009

Merci à Stenka, mais ça arrenge mon probleme qu'a moitié.
Car dès que j'essaye de stoker une donnée quand celle-ci est relue elle est de valeur 1.
Vérifier par vous même :
#include <stdio.h>


int code = 35554233;
FILE *verif;
int a;


main ()
{
char chemin [80];
printf ("\nEntrez le chemin ou est installe UX : ");
scanf ("%s", &chemin);
strcat (chemin, "data.txt");
verif = fopen (chemin, "wb");
if (verif == NULL)
{
printf ("\nSystéme non opérationelle");
printf ("\nFin de lancement");
perror ("Erreur systeme :");
sleep (1000);
exit (1);
}
else
{
fprintf (stderr, "\nChargement.");
for (a = 1; a < 20; a++)
{
sleep (50);
printf (".");
}
}
code = fwrite (&code,2,1,verif);
if (code == 0)
{
printf ("\nErreur lors de la lecture du code");
perror("Erreur systeme : ");
sleep (1000);
exit (1);
}
else
{
printf ("\nEnregistrement reussi");
}
printf ("\nLe code est %d", code);
code = fread (&code,2,1,verif);
if (code > 0)
{
printf ("\nErreur lors de la lecture du code");
perror("Erreur systeme : ");
sleep (1000);
exit (1);
}
printf ("\nLe code est %d apres la reouverture du fichier", code);
}
P.S:Ux est le logiciel sur lequel je travaille.
Si quelqu'un pourrait m'aider, je lui en serait reconnaissant.
Messages postés
65
Date d'inscription
vendredi 10 février 2006
Statut
Membre
Dernière intervention
21 octobre 2009

Merci à Stenka, mais ça arrenge mon probleme qu'a moitié.
Car dès que j'essaye de stoker une donnée quand celle-ci est relue elle est de valeur 1.
Vérifier par vous même :
#include <stdio.h>


int code = 35554233;
FILE *verif;
int a;


main ()
{
char chemin [80];
printf ("\nEntrez le chemin ou est installe UX : ");
scanf ("%s", &chemin);
strcat (chemin, "data.txt");
verif = fopen (chemin, "wb");
if (verif == NULL)
{
printf ("\nSystéme non opérationelle");
printf ("\nFin de lancement");
perror ("Erreur systeme :");
sleep (1000);
exit (1);
}
else
{
fprintf (stderr, "\nChargement.");
for (a = 1; a < 20; a++)
{
sleep (50);
printf (".");
}
}
code = fwrite (&code,2,1,verif);
if (code == 0)
{
printf ("\nErreur lors de la lecture du code");
perror("Erreur systeme : ");
sleep (1000);
exit (1);
}
else
{
printf ("\nEnregistrement reussi");
}
printf ("\nLe code est %d", code);
code = fread (&code,2,1,verif);
if (code > 0)
{
printf ("\nErreur lors de la lecture du code");
perror("Erreur systeme : ");
sleep (1000);
exit (1);
}
printf ("\nLe code est %d apres la reouverture du fichier", code);
}
P.S:Ux est le logiciel sur lequel je travaille.
Si quelqu'un pourrait m'aider, je lui en serait reconnaissant.