Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Fwrite e Fread ??
Forum - C/C++ - Fwrite e Fread ??

Avatar
Ragnarok (Normal User)
Newbie


Messaggi: 3
Iscritto: 25/07/2012

Segnala al moderatore
Postato alle 1:51
Mercoledì, 25/07/2012
Salve a tutti,
sono nuovo del Forum e contento di farne parte.
Avrei un problema, ho quasi finito di studiare il C come autodidatta, basandomi sul fantastico libro di Paul & Harvey Deitel, il problema è che mi sono bloccato sul fwrite e fread non riuscendo a capire come si usano ma sopratutto a che servono.
Ho fatto una ricerca approfondita grazie al mio amico google ma non sono riuscito a trovare un tutorial sull'argomento...
Premetto che conosco l' fopen e fclose ma sti due mi mancano.
Qualcuno potrebbe fare un piccolo tutorial in modo che io possa capirlo ? Possibilmente con parole semplici.
Grazie mille in anticipo.

PM Quote
Avatar
web_pirate (Normal User)
Rookie


Messaggi: 51
Iscritto: 27/12/2011

Segnala al moderatore
Postato alle 1:59
Mercoledì, 25/07/2012
E' semplicissimo.. fwrite serve per scrivere su di un file binario, ovvero non .txt, ed fread per leggervi. Il prototipo di fwrite è size_t fwrite(void *pt, size_t size, size_t blocks, FILE *fp), dove pt è il puntatore all'area di memoria dove si trova ciò che devi scrivere(stringa, array...), size è la dimensione di ciò che devi scrivere, e fp ovviamente il puntatore al file sul quale scrivere. blocks è il numero di blocchi da scrivere, in genere di lascia a 1. fwrite ritorna il numero di bytes scritti.
Per fread il prototipo è identico, soltanto che pt non indica ciò che devi scrivere sul file ma ciò che devi leggervi. Anch'esso ritorna il numero di bytes letti. :)
Spero di esserti stato utile...

Ultima modifica effettuata da web_pirate il 25/07/2012 alle 2:01
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 7:45
Mercoledì, 25/07/2012
Una precisazione ... le due funzioni operano in *modalità binaria* su *qualsiasi* file (quindi i .txt non sono esclusi).


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Ragnarok (Normal User)
Newbie


Messaggi: 3
Iscritto: 25/07/2012

Segnala al moderatore
Postato alle 17:26
Mercoledì, 25/07/2012
Un pochino complicata questa parte di C devo dire. E come faccio a sapere qual'è la dimensione giusta ? Dovrei consultare il codice Ascii ?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:14
Mercoledì, 25/07/2012
Testo quotato

Postato originariamente da Ragnarok:

Un pochino complicata questa parte di C devo dire.



In realtà è tra le più semplici ...

Testo quotato

E come faccio a sapere qual'è la dimensione giusta ?



La dimensione del buffer la conosci tu perché il buffer lo prepari tu in precedenza (e quindi conosci bene la sua dimensione in byte).

Testo quotato

Dovrei consultare il codice Ascii ?



E cosa c'entra il codice Ascii? Sei un po' confuso ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
web_pirate (Normal User)
Rookie


Messaggi: 51
Iscritto: 27/12/2011

Segnala al moderatore
Postato alle 0:52
Giovedì, 26/07/2012
Concordo con nessuno... XD Intendo che concordo con l'utente nessuno. XD Comunque... La dimensione, come ti dicevano, la conosci in partenza: se per esempio devi scrivere sul file la stringa "pippo", il parametro size sarà sizeof(pippo). La stessa cosa per la lettura... In genere se vai a leggere qualcosa su un file, dovresti conoscere la struttura di questo file, altrimenti non sapresti cosa e dove leggere, ma se anche così non fosse, potresti leggere uno alla volta tutti i caratteri, nel qual caso il parametro size sarebbe un semplice sizeof(char[correggetemi se sbaglio XD]).

PM Quote
Avatar
Ragnarok (Normal User)
Newbie


Messaggi: 3
Iscritto: 25/07/2012

Segnala al moderatore
Postato alle 2:35
Giovedì, 26/07/2012
Raga dovete perdonarmi ma ancora non riesco a comprenderlo e giuro che le sto provando tutte.
Sto facendo così, assimilo informazioni dal mio libro e ritorno a leggere quello che avete scritto, poi vado su internet, ma è tutto in inglese. Rivado sul libro, rileggo e poi ritorno qui a leggere quello che avete scritto, ma non mi entra nel cervello.
E come se leggessi il cinese. Mi sento un'idiota.
Raga forse sono io che vedo la cosa troppo complicata, invece è semplice semplice ? Secondo me il fwrite serve solo a trasformare le parole in bit e scriverle dentro un documento e basta. E l'Fread serve solo per trasformare i bit del documento in parole.Correggetemi se sbaglio.

Ultima modifica effettuata da Ragnarok il 27/07/2012 alle 1:30
PM Quote
Avatar
torn24 (Normal User)
Pro


Messaggi: 156
Iscritto: 04/01/2008

Segnala al moderatore
Postato alle 16:29
Venerdì, 27/07/2012
Ciao devi tenere presente che con fwrite e fread , puoi scrivere e leggere ,qualunque tipo di dato su un file binario , che siano int , float , array di char , o strutture .

se trovi esempi con array di char , non pensare che riguardi solo le stringhe ;)


esempio:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. typedef struct
  4. {
  5.   int a;
  6.   int b;
  7. }Tipostruct;
  8. int main ()
  9. {
  10.   Tipostruct x;
  11.    x.a=10;
  12.    x.b=20;
  13.   FILE * pFile;
  14.  
  15.   pFile = fopen ( "myfile.bin" , "wb" );
  16.   fwrite (&x , sizeof(x) , 1 , pFile );
  17.   /*
  18.         traduzione fwrite
  19.       fwrite ( indirizzo_di_x , dimensioni_in_byte_di_x , un_blocco_scritto , file)
  20.  
  21.       fread(indirizzo_di_x  ,  dimensioni_in_byte_di_x  , un_blocco_letto,file )
  22.   */
  23.   fclose (pFile);
  24.   return 0;
  25. }




gli esempi sulle stringhe possono confondere le idee

fwrite (buffer , 1 , sizeof(buffer) , pFile );

significa , indirizzo di buffer che essendo un array il nome è già  l' indirizzo
dimensione byte 1 , 1 byte è la dimensione di un carattere
sizeof(buffer) numero byte dell'array -->1 byte = 1 carattere -->num caratteri
numero blocchi da scrivere



PER EVITARE CONFUSIONE scrivi allo stesso modo anche per le stringhe

fwrite (buffer ,sizeof(buffer) , 1 , pFile );

è equivalente e non ti confoni :asd:

Ultima modifica effettuata da torn24 il 27/07/2012 alle 16:33
PM Quote
Avatar
web_pirate (Normal User)
Rookie


Messaggi: 51
Iscritto: 27/12/2011

Segnala al moderatore
Postato alle 0:32
Mercoledì, 01/08/2012
Allora, detto semplicemente, il primo parametro indica COSA vuoi scrivere, il secondo QUANTO è grande quello che vuoi scrivere, l'ultimo è DOVE lo vuoi scrivere. :)

PM Quote