Seuraavassa ohjelmassa tiedostoa käsitellään tietue kerrallaan.
![]() | Ohjelmassa luetaan näppäimistöltä syötettyjä henkilötietoja ja kirjoitetaan ne tiedostoon. |
![]() | Tämän jälkeen tiedot luetaan tiedostosta ja kirjoitetaan kuvaruudulle. |
![]() | Tiedosto on binääritiedosto, koska ikä talletetaan int-tyyppisenä. Täten tiedostoa ei pysty tulostamaan selväkielisenä esimerkiksi DOS:n type-komennolla. Ainoa tapa lukea tiedostoa järkevästi on tehdä se tietueittain käyttäen samaa tietuemäärittelyä kuin tiedostoon kirjoitettaessa. |
#include <stdio.h>
/*VAKIOT ********************************/
#define TIEDOSTO "A:\\NIMET.BIN" #define NIMI_MAX 20
/* TIETOTYYPT **************************/
struct henkilo{ char nimi[NIMI_MAX+1]; int ika; };
/* GLOBAALIT MUUTTUJAT **************/
FILE *f; /* henkilötiedosto */
/* PÄÄOHJELMA************************/
void main() { struct henkilo h; char vastaus; char rivi[81]; f = fopen (TIEDOSTO, "wb"); /* avataan tiedosto kirjoittamista varten */ if (f==NULL) { printf ("output-tiedoston avaus "); printf (" ei onnistu.\n"); } else { /* tiedoston avaus onnistui. Sinne voidaan kirjoittaa: */ do{ clrscr(); printf ("Anna nimi (max %d merkkiä):, NIMI_MAX); gets(h.nimi); /*nimi h:n nimi-kenttään */ printf ("Anna ikä: "); gets(rivi); sscanf(rivi,"%d",&h.ika); /*luetaan ikä h:n ika-kenttään */ fwrite(&h, sizeof h,1,f); /* kirjoitetaan tietue tiedostoon*/ printf ("Lisää nimiä (k/e)?"); vastaus = getch(); }while (vastaus=='k');
fclose(f); /* suljetaan tiedosto ja....*/
/* avataan se uudestaan lukemista varten: */ f = fopen(TIEDOSTO, "rb"); if (f==NULL) /* onnistuiko avaaminen */ { printf ("input-tiedoston avaus "); printf (" ei onnistu.\n"); } else /* onnistui, luetaan tiedostoa */ { fread (&h,sizeof h,1,f); /* luetaan yksi tietue */ while (!feof(f)) /*onnistuiko lukeminen */ { printf ("%s %d\n",h.nimi,h.ika); /* tulostetaan tietueen kentät */ fread(&h,sizeof h,1,f); /* luetaan seuraava tietue */ } fclose(f); /* suljetaan tiedosto */ } } }