Upload
others
View
18
Download
0
Embed Size (px)
Citation preview
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Ü
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.
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.
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.
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");
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.
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.
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.
9
Dosya Fonksiyonları― Açılan dosya fclose() ile tekrar kapatılmalıdır.
Genel olarak:...
FILE *dosya;...dosya = fopen(“dosya_adı”,”mod”);...fclose(dosya);...
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);
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);
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(); }
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);
14
Dosya Fonksiyonları
D:\Prog.Dil.1\notlar.txt
― fscanf(); Dosyadan formatlı veri okur.
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(); }
16
Dosya Fonksiyonları
― fgets(); Dosyadan string/karakter dizisi okur.
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();
}
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(); }
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(); }
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.
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."); }
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.
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.