Pb avec fread et fwrite

Résolu
Cyr62110 Messages postés 65 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 21 octobre 2009 - 3 avril 2006 à 19:34
cs_stenka Messages postés 14 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 30 octobre 2006 - 5 avril 2006 à 11:46
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

cs_stenka Messages postés 14 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 30 octobre 2006
5 avril 2006 à 11:46
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
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
3 avril 2006 à 19:49
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
0
cs_stenka Messages postés 14 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 30 octobre 2006
3 avril 2006 à 21:54
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
0
Cyr62110 Messages postés 65 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 21 octobre 2009
4 avril 2006 à 18:50
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cyr62110 Messages postés 65 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 21 octobre 2009
4 avril 2006 à 18:50
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.
0