duyuruElektroArge.com'a Hoşgeldiniz. Üye Olmak İçin Tıklayın. duyuru





houseForum ana sayfa   iletişimİletişim   bilgiSSS  
kırmızı yeşil mavi
ekleKayıt  anahtarGiriş
evForum ana sayfa goE-Kütüphane goE-Ders goC
 

  • Reklam

Ders 50 Dosyaya Veri Yazmak

C Dili Dersleri - Okan Bilke

Ders 50 Dosyaya Veri Yazmak

Mesajgönderen okanbilke » 05 Mar 2014 00:22

Bir dosyaya veri yazmak için şu üç adımı izleriz:
  1. Dosyanın açılması
  2. Gerekli fonksiyonlar kullanılarak verinin dosyaya yazılması
  3. Açılan dosyanın kapatılması
Şimdi bu üç adımı sırayla inceleyelim. Daha sonra bu üç adımı içeren programlar yazıp onları inceleyeceğiz.


Dosyanın Açılması - fopen() Fonksiyonu
C'de dosya açma fonksiyonu fopen()'dır. Bu fonksiyon ile dosya sisteminde bir dosya açılır ve fonksiyonun geri dönüş değeri olarak bu dosyaya FILE tipinde bir gösterici döner. FILE, stdio.h başlık dosyasında tanımlanmış bir tiptir.
fopen() fonksiyonunun prototipi şu şekildedir:
FILE *fopen(char *dosya_ismi, char *mod);

Bu prototip de dosya işlemlerinde kullanılan diğer fonksiyon prototipleri gibi stdio.h dosyası içerisinde bulunur. Şimdi prototipi inceleyelim: FILE ifadesi, fopen() fonksiyonunun geriye döndürdüğü göstericinin tipini belirler. Bu durumda fopen() fonksiyonu FILE tipinde bir gösterici döndürür deriz. fopen() fonksiyonu iki parametre alır. İlki, dosya_ismi, açılacak dosyanın yolu(path) ve ismidir. Örneğin C:\elektroarge\ornek.txt gibi. İkinci parametre olan mod ile dosyanın açılma amacı belirtilir. Tahmin edeceğiniz gibi bir dosya bir çok amaçla açılmış olabilir: Veri yazmak, veri okumak ve dosya sonuna veri eklemek gibi. Örneğin dosyaya veri yazmak istediğimizde mod parametresi için fopen() fonksiyonuna "w" değerini göndeririz. w harfi, yazmak anlamına gelen write kelimesinden gelmektedir. Benzer şekilde bir dosyayı veri okumak için açmak istediğimizde "r" değerini kullanırız. Hangi durumda hangi mod'u kullanacağımızı birazdan göreceğiz. Şimdi, bu anlattıklarımıza göre fopen() fonksiyonunun nasıl kullanıldığını görelim. Örneğin C:\elektroarge\ornek.txt dosyasını veri yazmak amaçlı açmak istediğimizde şu dizilimi kullanmamız gerekir:
FILE *ptDosya;
ptDosya = fopen("C:\elektroarge\ornek.txt", "w");

2. satırda, path ile belirtilen dizindeki dosya yazma amaçlı olarak açılıyor ve açılan bu dosyayı gösteren bir gösterici döndürülerek ptDosya değişkenine atanıyor.


Dosyaya Karakterlerin Yazılması - putc() Fonksiyonu
fopen() fonksiyonu ile bir dosya açtığımızda o dosya üzerinde herhangi bir işlem yapılmaz. Sadece dosya kullanıma hazır, açık bir şekilde beklemektedir. Bir dosyaya veri yazmak için çeşitli fonksiyonlar vardır. Bunlardan ilki putc() fonksiyonu dosyaya yazdığı karakterin ASCII kodunu geri döndürür.
Yukarıdaki örnekte açtığımız ornek.txt dosyasına 'L' karakterini yazmak istersek kullanacağımız dizilim şöyle olacaktır:
putc('L', ptDosya);

Dosyaya bir karakter yazdırmak için kullanılan diğer bir fonksiyon da fputc() fonksiyonudur. Bu fonksiyonun işlevi ve kullanım biçimi de aynen putc() fonksiyonunda olduğu gibidir.


Dosyanın Kapatılması - pclose() Fonksiyonu
C'de açtığımız tüm dosyaları işimiz bittiğinde kapatmalıyız. Bir dosyanın kapatılması, o dosyaya olan akışın kaldırılması demektir. Açık bir dosyayı kapatmak için fclose() fonksiyonunu kullanırız:
int fclose(FILE *akis);

fclose() fonksiyonu başarılı ise geriye sıfır döndürür, başarılı değilse birazdan göreceğimiz EOF ismi verdiğimiz özel bir değer döndürür.
Yukarıda açtığımız ve içine 'L' karakteri yazdırdığımız ornek.txt dosyasını kapatmak için şu dizilimi kullanmalıyız:
fclose(ptDosya);

Şimdi bu örnekleri bir program haline getirerek sonucu inceleyelim. İlk programımız D:\ sürücüsünde açtığımız bir dosyaya adımızın baş harflerini yazdırdığımız basit bir uygulama olacak. Siz dosyayı istediğiniz konumda açabilirsiniz. Bunun için 9. satırdaki path'i değiştirmeniz yeterli.
//dosya_ac_yaz_kapat.c - 02.03.2014 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{
FILE *ptDosya;
// dosyayı aç:
ptDosya = fopen("D:\\ornek.txt", "w");

// karakterleri yazdır:
putc('G', ptDosya);
putc('M', ptDosya);
putc('T', ptDosya);

// dosyayı kapat
fclose(ptDosya);

return 0;
}
//bu dosya elektroarge.com'dan indirilmiştir.

Bu program önce D:\ dizini üzerinde ornek.txt isimli bir dosyayı açmak için arayacaktır. Böyle bir dosya olmadığı için de dosya oluşturulacaktır.
 ! okanbilke yazdı:
Aynı işlemi C üzerinde yaparsanız dosya windows güvenlik izinlerinden dolayı oluşturulamayabilir.

12., 13. ve 14. satırlarda putc() fonksiyonu ile dosya sırasıyla 'G', 'M' ve 'T' karakterleri yazdırılır. 17. satırda da açtığımız dosyayı fclose() fonksiyonu ile kapatırız.
Programda fopen() fonksiyonunun "w" modu ile ilgili kullanılmasıyla ilgili dikkat etmemiz gereken önemli bir nokta var: "w" modu kullanıldığında fopen() fonksiyonu kendisine açılmak üzere verilen dosya eğer sistemde mevcutsa bu dosyayı siler ve yerine yeni, boş bir dosya oluşturur. Eğer dosya sistemde mevcut değilse, o dosyayı oluşturarak açar. Buradan çıkarmamız gereken sonuç şudur: Bir dosyaya veri yazmak ile dosyaya veri eklemek farklı kavramlardır. Bir dosyaya veri yazmak için "w" modunu kullandığımızda dosya her seferinde yeniden oluşturulur. Dosyaya veri eklemek için, birazdan göreceğimiz "a" modunu kullanırız. "a" modu ile açılan dosyanın içeriği silinmez, dosyaya yazılan yeni veriler dosya sonuna eklenir.
Yukarıdaki programı ilk çalıştırdığımızda sistemde ornek.txt isimli bir dosya olmadığı için önce bu dosya bulunmadığı için önce bu dosya oluşturulacaktır. D:\ konumunu açarsak oluşturulan dosyamızı görebiliriz. Dosya içeriği şöyle olacaktır:
Resim

Dosya içerisinde 'G', 'M' ve 'T' karakterlerinin yazdırılmış olduğunu görüyoruz. Şimdi D:\'de oluşturduğumuz bu dosyayı silmeden, yukarıdaki programı biraz değiştirerek yeniden çalıştıralım. Bu sefer dosyaya sadece 'A' karakterini yazdıralım.
//dosya_ac_yaz_kapat2.c - 02.03.2014 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{
FILE *ptDosya;
// dosyayı aç:
ptDosya = fopen("D:\\ornek.txt", "w");

// karakterleri yazdır:
putc('A', ptDosya);

// dosyayı kapat
fclose(ptDosya);

return 0;
}
//bu dosya elektroarge.com'dan indirilmiştir.

Programı bu şekilde çalıştıralım dosyamızı tekrar inceleyelim. Siz belki de dosya içeriği olarak GMTA ifadesini bekliyordunuz ancak dosyada sadece A karakteri olacaktır:
Resim

Farkettiğiniz gibi son programımızda fopen() fonksiyonu, sistemde daha önce oluşturulan ornek.txt dosyası olduğu halde bu dosyayı silerek aynı isimde yeni bir dosya oluşturdu. Böylece içinde GMT verileri olan dosya silinerek yerine içinde sadece 'A' karakteri bulunan aynı isimli dosya oluşturulmuş oldu.
Şimci C'de bir dosya açarken kullanabileceğimiz modları görelim. Modlar fopen() fonksiyonu ile kullanılır ve dosyanın ne amaçla açıldığını belirtir.


Dosyanın Kapatılması - pclose() Fonksiyonu
fopen() fonksiyonu ile kullanılabilecek modlar ve açıklamaları şöyledir:
ModAçıklama
rDosyayı veri okumak için aç
wDosyayı veri yazmak için aç
aDosyayı veri eklemek için aç
rbDosyadan veri okumak için dosyayı ikili(binary) olarak aç
wbDosyaya veri yazmak için dosyayı ikili(binary) olarak aç
abDosyaya veri eklemek için dosyay ikili(binary) olarak aç
r+Dosyayı veri okumak veya veri yazmak için aç
w+Dosyayı veri okumak veya veri yazmak için aç
a+Dosyayı veri okumak veya veri eklemek için aç
rb+Dosyayı veri okumak veya veri yazmak için ikili olarak aç
wb+Dosyayı veri okumak veya veri yazmak için ikili olarak aç
ab+Dosyayı veri okumak veya veri eklemek için ikili olarak aç

Dosyalarla ilgili ikinci örneğimizde geçmeden önce ikili dosyalar konusundan biraz bahsedelim. İkili dosyalar, isminden de anlaşılacağı gibi ikili(binary) formatındaki dosyalardır. Bu dosyaların içeriğini text dosyalarında olduğu gibi görüp anlamamız mümkün değildir. Örneğin exe uzantılı bir dosya, içeriği bizim anlayamayacağımız onlarca karakterden oluşan ikili bir dosyadır. Bir exe dosyasını Windows'un NotePad'inde açtığımızda karşımıza aşağıdakine benzer bir görüntü gelecektir:
Resim


Ders İçinde Yazılmış Tüm Programlar ve Kodları Ektedir:
Mesaj içeriğini görmek için kayıt ve giriş gerektirir

DERS 51 DOSYADAN VERİ OKUMAK

C Dili Dersleri Ders Listesi
okanbilke@gmail.com
Kullanıcı avatarı
okanbilke
Site Kurucusu
Site Kurucusu
 
Mesajlar: 721
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 15 Mar 2013 13:09
Konum: Ankara

Reklam

Dön C

Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 1 misafir


  • Reklam