Oppure

Loading
24/07/12 23:51
Ragnarok
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.
aaa
24/07/12 23:59
web_pirate
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 25/07/12 0:01
aaa
25/07/12 5:45
nessuno
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à.
25/07/12 15:26
Ragnarok
Un pochino complicata questa parte di C devo dire. E come faccio a sapere qual'è la dimensione giusta ? Dovrei consultare il codice Ascii ?
aaa
25/07/12 17:14
nessuno
Postato originariamente da Ragnarok:

Un pochino complicata questa parte di C devo dire.


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

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).

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à.
25/07/12 22:52
web_pirate
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]).
aaa
26/07/12 0:35
Ragnarok
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 26/07/12 23:30
aaa
27/07/12 14:29
torn24
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:


#include <stdio.h>

typedef struct 
{
  int a;
  int b;
}Tipostruct;
int main ()
{
  Tipostruct x;
   x.a=10;
   x.b=20;
  FILE * pFile;
  
  pFile = fopen ( "myfile.bin" , "wb" );
  fwrite (&x , sizeof(x) , 1 , pFile );
  /* 
        traduzione fwrite 
      fwrite ( indirizzo_di_x , dimensioni_in_byte_di_x , un_blocco_scritto , file)

      fread(indirizzo_di_x  ,  dimensioni_in_byte_di_x  , un_blocco_letto,file )
  */
  fclose (pFile);
  return 0;
}





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 27/07/12 14:33
aaa