Tiedoston luku ja talletus
Yleistä
Ohjelman käsittelemä tieto halutaan usein tallettaa levylle uutta käyttöä varten. Tieto voidaan tallentaa teksti tai binäärimuodossa.
Tekstitiedostojen käsittely
Tekstitiedostot ovat ns. perättäissaantitiedostoja, joita on kohtuullisen helppo käsitellä tiedosto-osoittimen (FILE* pTiedosto) avulla, lisäksi tarvitaan käskyt tiedoston avaukseen (open) ja sulku (close) sekä tiedostoon kirjoitukseen (fprintf) ja lukuun (fgets).
Tiedosto-osoitin esitellään seuraavasti:
FILE* pTiedosto;
open käskyllä tiedosto-osoitin saadaan osoittamaan luettavaa tai kirjoitettavaa paikkaa tiedostossa
pTiedosto = fopen("a:tiedot.txt","a");
Ensimmäinen parametri open- funktiossa on avattavan tiedoston nimi.
Toinen parametri määrää, mitä tiedostolle tehdään:
r = luku
w = kirjoitus tiedoston alusta
a = lisäys
Tekstitiedostoon kirjoitus
KirjoitusTiedostoon()
{
FILE* fi;
if ((fi = fopen("a:tiedot.txt","a")) !=NULL) //tiedoston avaus
{
fprintf(fi,"%06s","Minä");
fprintf(fi," %06s","olen");
fprintf(fi," %06s"," Teemu ");
fprintf(fi," %12s"," Tietäväinen ");
fprintf(fi," %15s\n"," tiedän kaiken");
fprintf(fi," %15s"," tietokoneista");
fprintf(fi," %05s"," !!!!\n");
fclose(fi);
}
else
{
printf ("Tiedostoa ei saa avatua ");
printf("\n virhe PAINA ENTER");
getch();
}
}
Tekstitiedoston luku levyltä muuttujiin
void LukuLevylta()
{
char teksti[100];
FILE*fi;
if ((fi = fopen("a:tiedot.txt","r")) !=NULL) //tiedoston avaus
{
while (fgets (teksti, 100,fi)) printf(teksti);
if (feof (fi)) printf("\n Tiedosto luettu\n");
fclose (fi);
}
else
{
printf ("Tiedostoa ei saa avatua!! Tarkasta onko levy täynnä!!");
printf("\n virhe PAINA ENTER");
getch();
}
}
Binääritiedostojen käsittely
void BinTiedostonKirjoitus()
{
FILE*fp;
char juttu[100];
strcpy(juttu,"tämä on testi");
//tiedoston avaus
if((fp=fopen("C:testi.bin","wb")) == NULL)
{
printf(" tiedostoa ei voi avata ");
return;
}
fwrite(juttu,sizeof(char),len(juttu),fp);
fclose(fp);
printf("talletin PAINA ENTER");
getch();
}
void BinTiedostonLuku()
{
FILE *fp;
char juttu[100];
if((fp=fopen("a:testi.bin","rb")) == NULL) return;
if(fread(juttu,sizeof(char),100,fp)!=1)
{
fclose(fp);
return;
}
printf("\n Binääritiedoston lukuvirhe ");
}
Yhdessä käytettävät funktiot
FILE *fi = fopen(nimi,"rt") - fscanf(fi,...) - fgets(...,fi) - feof(fi) -
fclose(fi)
FILE *fo = fopen(nimi,"wt") - fprintf(fo,...) - fclose(fo)