8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ :...

23
8. Hafta – Dosya İşlemleri Dr. Öğr. Üyesi Nesibe YALÇIN https://nesibeyalcin.wordpress.com/bsm104/ BARTIN ÜNİVERSİTESİ MÜHENDİSLİK, MİMARLIK VE TASARIM FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Transcript of 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ :...

Page 1: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

8. Hafta – Dosya İşlemleri

Dr. Öğr. Üyesi Nesibe YALÇIN

https://nesibeyalcin.wordpress.com/bsm104/

BARTIN ÜNİVERSİTESİ

MÜHENDİSLİK, MİMARLIK VE TASARIM FAKÜLTESİ

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Page 2: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

2

Dosya İşlemleri― Programın çalışma esnasında her türlü değişken içinde tutulan ve işlenen bilgiler RAM de tutulur. Program sona erdiğinde RAM de kullanılan alan boşaltılır.

― Bazı verilerin saklanmasına gerek duyulur.

― Programda bir dosya, FILE türünde bir pointer/gösterici ile bildirilir.

FILE * dosya_gostericisi;

― FILE deyimi, stdio.h içerisinde bildirilmiş bir yapıdır.

Page 3: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

3

Metin Dosyaları ve Binary Dosyalar― Metin dosyaları, sıralı ve satırlar halinde metin bilgilerinden oluşmaktadır.

― Her satırda toplam 255 karakter bulunur. Her satırda 0 veya daha fazla karakter içerir.

― Kod içinde satır sonlarına “\n” yeni satır (new line) konulur, fakat program dosyaya kayıt yaparken satır sonuna CR-LF (CarriageReturn – LineFeed, Shift+Enter) işareti koyar. Bu işarete, satır sonu (end of line) işareti denir.

Page 4: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

4

Metin Dosyaları ve Binary Dosyalar― Veri okunurken ise satır sonu işareti programa “\n” yeni satır karakteri olarak çevrilir.

― Binary (ikili) dosyalarda veriler bellekteki gösterim biçimleriyle saklanırlar.

― Bütün veriler byte byte ardışık olarak dosyaya yazılır.

― Her iki dosya çeşidinde de dosya sonunu gösteren işaret EOF (end of file) vardır.

Page 5: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

5

Dosya Fonksiyonları― Bir dosyaya okuma/yazma yapmak için ilk olarak dosyanın açılması gerekir.

― Dosya açmak için fopen() fonksiyonu kullanılır.

FILE * dosya; // dosya göstericisi dosya=fopen("dosya_adı","dosyanın_modu");

― Hangi dosyanın açılacağını ve dosyanın ne amaçla açıldığını belirtiyoruz.

FILE *fp = fopen("deneme.dat","r");FILE *fptr = fopen("sayilar.bin", "rb");

Page 6: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

6

Dosya Açma Modları― Açılış modunda metin dosyaları için t, ikili dosyalar için b eklenir.

― Bu belirleme yapılmamışsa, varsayılan açılış modu metindir (yani t).

r: Dosyayı sadece okumak için açar (read only). Bu şekilde açılacak metin dosyası mutlaka sistem üzerinde bulunmalıdır aksi halde hata oluşur.― rt : Okuma için bir metin dosyası açar. ― rb : Okuma için bir dosyayı ikili sistemde açar.

Page 7: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

7

Dosya Açma Modlarıw: Dosyayı sadece yazmak için açar (write only). Eğer açılması istenen metin dosyası sistem üzerinde yok ise oluşturulacaktır. Eğer var ise dosya silinerek yerine yenisi konulacaktır !!!― wt : Metin dosyasını yazma için açar/oluşturur. ― wb : Yazma için ikili sistemde bir dosya açar/oluşturur.

a: Dosyanın sonuna ekleme yapmak için açar (append). Dosya yoksa yeni oluşturulacak, var ise öncekinin sonundan yazmak üzere hazır hale gelecektir.― at : Metin dosyasının sonuna ekleme yapar. ― ab : İkili sistemde bir dosyaya ekleme yapar.

Page 8: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

8

Dosya Açma Modlarır+ : Okuma/yazma için bir metin dosyası açar. (r+t)w+ : Okuma/yazma için bir metin dosyası açar. (w+t)a+ : Okuma/yazma için bir metin dosyası açar. (a+t)

r+b : Okuma ve yazma için bir ikili sistem dosyası açar. w+b : Okuma ve yazma için bir ikili sistem dosyası oluşturur. a+b : Okuma ve yazma için bir ikili sistem dosyasına ekleme

yapar.

rb+, wb+, ab+, rt+, wt+, at+ şeklinde açma modların da vardır.

Page 9: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

9

Dosya Fonksiyonları― Açılan dosya fclose() ile tekrar kapatılmalıdır.

Genel olarak:...

FILE *dosya;...dosya = fopen(“dosya_adı”,”mod”);...fclose(dosya);...

Page 10: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

10

Dosya Fonksiyonları― Dosyanın açılıp açılmadığını kontrol etmek için;

FILE *dizin;

dizin= fopen("deneme.dat", "w");

if( dizin == NULL )

{

printf("Dosya acilmiyor...");

exit(1);

}

... // dosya açılırsa yapılacak işlemler

... fclose(dizin);

Page 11: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

11

Dosya Fonksiyonları― fprintf(); Dosyaya formatlı veri yazar.

FILE *fp=fopen("deneme.txt","w"); int a=2,b=3;fprintf(fp,"%d, %d",a,b);fclose(fp);

― fputs(); Dosyaya string yazar.FILE *fp=fopen("deneme.txt","a"); char *kelime="bartın";fputs(kelime, fp);fputs("\n merhaba", fp);fclose(fp);

Page 12: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

12

Dosya Fonksiyonları#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int main() {

float x,y,z,hacim;

FILE * fp = fopen("D:\\hacim.txt","w+");

if( fp== NULL) {

puts("Dosya acilamiyor.");

exit(1); }

printf("Odanin boyutlarini girin : ");

scanf("%f %f %f",&x,&y,&z);

hacim=x*y*z;

fprintf(fp, "Hacim:\n %.2f * %.2f * %.2f= %.2f",x,y,z,hacim);

fclose(fp);

puts("Bilgiler kaydedildi.");

getch(); }

Page 13: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

13

Dosya Fonksiyonları― fputc(); Dosyaya karakter yazar.

FILE *fp=fopen("deneme.txt","w"); char x='&';fputc(x,fp);fclose(fp);

― fgetc(); Dosyadan karakter okur. FILE *fp=fopen("deneme.txt","r"); char x=fgetc(fp);fclose(fp);printf("%c",x);

Page 14: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

14

Dosya Fonksiyonları

D:\Prog.Dil.1\notlar.txt

― fscanf(); Dosyadan formatlı veri okur.

Page 15: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

15

Dosya Fonksiyonları#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int main() {

FILE *oku=fopen("D:\\Prog.Dil.1\\notlar.txt","r");

if(oku==NULL) {

printf("dosya acilamadi...");

getch();

exit(1); }

char sube,ad [10],soyad[20];

float boy,kilo;

fscanf(oku,"%c %s %s %f %f\n",&sube,ad,soyad,&boy,&kilo);

printf("%c %s %s %f %f\n",sube,ad,soyad,boy,kilo);

fscanf(oku,"%c %s %s %f %f",&sube,ad,soyad,&boy,&kilo);

printf("%c %s %s %f %f",sube,ad,soyad,boy,kilo);

fclose(oku);

getch(); }

Page 16: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

16

Dosya Fonksiyonları

― fgets(); Dosyadan string/karakter dizisi okur.

Page 17: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

17

Dosya Fonksiyonları#include <stdio.h>

#include <conio.h>

int main()

{

FILE *fptr=fopen("sehirler.txt","r");

char sehir[20];

fgets(sehir,20,fptr);

printf("%s",sehir);

fgets(sehir,20,fptr);

printf("%s",sehir);

fgets(sehir,20,fptr);

printf("%s",sehir);

fclose(fptr);

getch();

}

Page 18: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

18

Dosya Fonksiyonları― feof(); Dosyanın sonuna gelinip gelinmediğini gösterir. Eğer dosyanın sonuna gelindiyse true değerini döndürür. Fonksiyon false ise dosyanın sonuna gelinmemiş demektir.

int main() {FILE *fptr; char sehir[20];if((fptr=fopen("sehirler.txt", "r"))==NULL){

printf("Okuma icin acilamadi...");exit(1); }

while(!feof(fptr)) {fgets(sehir,20,fptr);printf("%s",sehir); }

fclose(fptr);getch(); }

Page 19: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

19

Dosya FonksiyonlarıEOF; End Of File (dosya sonu) anlamındadır.

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int main(){

FILE *fptr;

char ch='X';

if((fptr=fopen("sehirler.txt", "r"))==NULL) {

printf("Okuma icin acilamadi...");

exit(1); }

while(ch!=EOF) {

ch=fgetc(fptr);

printf("%c",ch); }

fclose(fptr);

getch(); }

Page 20: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

20

Uygulamalar― “C” sürücüsünde “projeler” klasöründe “uygulama” alt klasöründeki “veri.dat” isimli dosyayı sadece okuma modu ile açan deyimi yazınız.

• fclose(fp); • fputc(fp, *a); • fputs(fptr, b); • c=fgetc();• fgets(d, 10, fptr);

― Hatalı olan satırları bulup düzeltiniz.

Page 21: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

21

Uygulamalar― Klavyeden girilen bir kelime içindeki harfleri alt alta bir dosyaya yazan programı yazınız.

#include <stdio.h>#include <string.h>#include <stdlib.h>int main() {

FILE * fp = fopen("D:\\yaz.txt","w");if( fp== NULL) {

puts("Dosya acilamiyor.");exit(1); }char kelime[10]; printf("Kelime girin :");

scanf("%s",kelime);for(int i=0;i<strlen(kelime);i++)fprintf(fp, "%c\n",kelime[i]);fclose(fp);puts("Bilgiler kaydedildi."); }

Page 22: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

22

Uygulamalar«ogrenci.txt» adlı dosyada öğrencilere ilişkin numara, ad, soyad, vize, final ve ortalama not bilgileri tutulmaktadır.

― Kullanıcı tarafından girilen öğrenci numarasına göre dosyada arama yaparak ilgili öğrenciye ait bilgileri ekrana yazan programı yazınız.

Page 23: 8. Hafta Dosya İşlemleri - WordPress.com · 2020-04-01 · 8 Dosya Açma Modları r+ : Okuma/yazma için bir metin dosyası açar.(r+t) w+ : Okuma/yazma için bir metin dosyası

23

# Ödev #«sayilar1.txt» içerisinde 10 adet, «sayilar2.txt» içerisinde ise 5 adet küçükten büyüğe sayılar bulunmaktadır. Bu iki dosya içindeki sayıları sıralı bir şekilde «sayilar.txt» adlı tek bir dosyaya yazan programı yazınız.