DOSYA İŞLEMLERİ
Dosyanın açılması Dosya işlemi yapabilmek için önce dosyanın açılması gerekir. FILE * fopen (char * filename, char * mode) fopen fonksiyonun 1. parametresi dosya ismi 2. Parametresi ise dosya işlem türüdür.
fopen fonksiyonu dosyanın açılmaması durumunda NULL değerine geri döner Dosyanın açılıp açılmadığı mutlaka geri dönüş değerine bakılarak kontrol edilmelidir.
dosya açma örnekleri FILE * hFile; hFile = fopen( dosya_ismi, "r"); if (hFile == NULL) { // hata, dosya bulunamadı } else { // dosyayı kapat fclose(hFile); }
dosya açma örnekleri FILE *fp; fp=fopen("c:\\test.txt", "r"); char filename[80]="c:\\my_file.txt"; if((pfile = fopen(filename, "r")) == NULL){ printf(" %s dosyası acilamadi", filename); return -1; }
dosya kapatma örneği FILE * hFile; if ((hFile = fopen( dosya_ismi, “w") == NULL) { printf(“ dosya açılamadı\n”); exit(1); } ….. fclose(hFile);
r w a r+ w+ a+ Açılış Modu İşlem türü Yalnız okuma Dosya diskette olsada olmasada yeniden yaratır a Var olan dosyanın sonuna ekleme yapar r+ Hem okuma hem yazma yapar. Daha once DOSYA AÇILMIŞ OLMALI w+ Hem okuma hem yazma yapar. Önce açılması gerekmez a+ Hem okuma hem yazma yapar. Var olan dosyanın sonuna ekleme yapar
Dosyadan bir karakter okuyup yazan fonksiyonlar int fgetc(FILE *fp) Fonksiyonun geri dönüş degeri, okuma başarılı ise okunan karakter ile, başarısız ise EOF (-1) değeri ile geri döner.
Dosya Sonu Tespiti Dosya sonuna gelip gelmediği feof( ) fonksiyonu ile tespit edilir. Fonksiyon dosya sonuna geldiğinde geri dönüş değeri “1” değerini alır. Eğer dosya sonuna ulaşmamışsa “0” değerine geri döner
Dosya Sonu Tespiti while(!feof(fp)) { if(fgets(str, 126, fp)) printf("%s", str); }
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char kaynak_liste[40]="sinifliste.txt"; char str[128]; if((fp = fopen(kaynak_liste, "r"))==NULL) { printf("Dosya acilamadi.\n"); exit(1); } while(!feof(fp)) { if(fgets(str, 126, fp)) printf("%s", str); fclose(fp); return 0; fgetsornek.c Bir dosyanın icerigini Ekrana yazdırır. fgetsornek.c
Bir dosyadan diğer bir dosyaya kopyalama yapıldı. #include <stdio.h> int main () { FILE *kaynak, *hedef; char kaynak_dosya[40]="sinifliste.txt"; char hedef_ dosya[40] ="kopyaliste.txt"; char ch; if((kaynak = fopen(kaynak_dosya, "r")) == NULL){ printf("Kaynak dosya acilamadi... "); exit(1); } if((hedef = fopen(hedef_dosya, "w")) == NULL){ ch = fgetc(kaynak); while (ch != EOF) fputc(ch, hedef); printf("dosya kopyalandi\n"); fclose (kaynak); fclose (hedef); return 0; Bir dosyadan diğer bir dosyaya kopyalama yapıldı.
fgets ve fputs fonksiyonları char *fgets(char *line, int maxline, FILE *fp) Dosyadan bir dizi karakter okumak için kullanılır. int fputs(char *line, FILE *fp) Dosyaya bir dizi karakter yazmak için kullanılır. fgetsornek1.c fgetsornek2.c örnekleri incele
fread fonksiyonu int fread(void * buffer, int size, int num, FILE * hFile) Dosyada bulunan bir bilgiyi blok olarak beleğe alır 1. parametre 4. parametredeki dosyadan blok bilginin hafızaya alınacağı yeri gösterir 2. Parametre okuyacağı byte sayısıdır 3. Parametre okuma sayısıdır 4. Parametre bilgilerin okunacağı dosyayı gösterir.
fread fonksiyonu int fread(void * buffer, int size, int num, FILE * hFile) Bellekten okunan byte sayısı “size * num” kadardır. Fread fonksiyonun geri dönüş değeri okuyabildiği num sayısıdır.
fwrite fonksiyonu int fwrite(void * buffer, int size, int num, FILE * hFile) Bellekte bulunan bir bilgiyi blok olarak dosyaya yazar 1. parametre blok bilginin hafızada bulunduğu yeri gösterir 2. Parametre okuyacağı byte sayısıdır 3. Parametre okuma sayısıdır 4. Parametre 1. parametredeki bilgilerin yazılacağı dosyayı gösterir.
Dosya işlemleri fonksiyonları fprintf() fscanf() fgets() fputs() fopen() fclose() getc() ungetc() putc() fgetc() fputc() feof() fread() fwrite() ftell() fseek() rewind() fflush() Ödev: bu fonksiyonların kullanımlarını araştırınız.