/* Tiedostonkäsittelyä, osa 2 */ /* HUOM! Kun ajat tätä ohjelmaa, tarkista, että tiedostosta * h09e02.txt on poistettu teksti "That's all folks!" */ #include int main() { int n; /* Tiedosto voidaan avata sekä lukemista että kirjoittamista varten. * * "r+" -- avataan olemassa oleva tiedosto lukemista ja kirjoittamista * varten * "w+" -- luodaan uusi tiedosto luk. ja kirj. varten * "a+" -- avataan olemassa olevan tiedosto lukemista ja tiedoston * loppuun kirjoittamista varten * */ /* Tiedosto h09e02.txt on muuten samanlainen kuin h09e01.txt, mutta * lopusta on poistettu teksti "That's all folks!". * * Lisää taas hakemistopolku! */ FILE *f; f=fopen("h09e02.txt","r+"); /* Kun avataan olemassaolevaa tiedostoa, on hyvä tarkistaa, onnistuiko * avaus. fopen palauttaa nollapointterin, jos avaus epäonnistui. */ if(f==NULL) /* nollapointteri NULL ei osoita mihinkään tietokoneen muistissa */ { printf("w00t?!!11\n"); return 1; /* Ohjelman suoritus päättyy tähän. Palautetaan arvo 1 * erotuksena onnistuneeseen suoritukseen, jolloin palautetaan 0 */ } /* Tiedostosta luetaan fscanf-funktiolla, joka toimii kuten scanf, * mutta 1. argumentti on tiedosto-osoitin. Huom! Luettavan datan * täytyy olla tiedostossa oikeassa muodossa, ts. fscanf-funktiota * käytettäessä on tiedettävä, mitä tiedosto sisältää. */ fscanf(f,"%i",&n); /* Luettaessa tiedosto-osoitin siirtyy tiedostossa eteenpäin. * Lopulta tulee vastaan tiedoston loppu. Funktio feof kertoo, * onko loppu saavutettu. */ while(!feof(f)) { printf("%i\n",n); fscanf(f,"%i",&n); } /* Koska tiedosto on avattu 'moodilla' r+, voidaan tiedostoon myös * kirjoittaa. Koska tiedosto on juuri luettu loppuun, uusi sisältö * tulee myös tiedoston loppuun. */ fprintf(f,"That's all, folks!"); fclose(f); return 0; }