Dosya Acilmasi ( fopen ve fclose)

C’de ya da herhangi bir durumda bir dosya ile işlem yapabilmek için önce o dosyanın açılması gerekmektedir. Ve söz konusu durum C ise fopen fonksiyonu kullanılır.


FILE *fopen( char *filename, char *mode);


Görüldüğü üzere fopen iki parametre istiyor. İlk parametresi ile verilmiş olan dosyayı, ikinci parametresi ile de o dosyayı verilmiş olan modda açar. Dosya belirtilirken yol ifadesi kullanılabilir.
Yapıdan da anlaşıldığı gibi fopen fonksiyonu FILE türünden bir adresle geri dönüyor. FILE stdio.h kütüphanesi içinde bildirilmiş bir yapıdır ve daima büyük harflerle yazılır. Ve temelde fopen dosyayı açmak için işletim sisteminin aşağı seviyeli fonksiyonlarını kullanmaktadır. Dosyaya erişmek için gerek yüksek gerekse düşük seviyeli birtakım bilgiler burda saklanır. Dosyanın açılması durumunda geri dönüş değeri ile gösterilen yapı fopen tarafından dinamik olarak tahsis edilir. Dosyanın açılamaması durumda ise fopen NULL göstericisine döner. Bu yüzden dosyanın açılıp açılmadığını test etmekte genelde fayda vardır 🙂 Bazıları bunu gereksiz bulabilir ancak dosyanın açılmaması için pekçok sebep olabilir. Bunlardan en basiti, eğer öyle bir dosya diskte mevcut değilse, diskteki herhangi bir organizasyon bozukluğu ya da yanlış açılış modunun kullanılmış olması ya da File handle yetersizliği gibi birkaç ana sebep sayabiliriz.


fopen ile dosyamızı açarken kullanacağımız açılış modu gerçekten çok önemlidir. Yukarda da saydığım üzere kimi zaman dosyanın açılmamasına bile sebep olabilir. Aşağıda dosya açılış modlarını ve hangi durumlarda kullanıldıklarını listeyeleceğim :


r : Dosyadan sadece okuma yapacağımız zaman seçeceğimiz mod. READ kelimesinden gelmektedir. Bu modda dosya açacaksak açacağımız dosyanın diskte daha onceden var olması yada yaratılmış olması şarttır.


w : Bu modda dosya diskte varolsa da olmasa da fopen’ı bu modda çalıştırdığımızda otomatik olarak o dosyayı yaratır. Bu modda açılmış bir dosyadan okuma yapılamaz. YAZMA yapılabilir. w harfi tahmin edebilceğiniz gibi WRITE kelimesinden gelmiştir.


a : VAr olan bir dosyanın sonuna ekleme yapmak için kullanılan bir mod. Bu modda açılmış olan bir dosyadan okuma yapılamaz. APPEND kelimesinden gelmiştir.


r+ : Okuma ve yazmayı aynı anda yapabilmemiz olanak tanıyan mod. Ancak dosyanın daha önce yaratılmış olması gerekir.


w+ : Okuma ve yazmayı aynı anda yapabilmemize olanak tanıyan bir baska mod ancak bu modda dosyanın diskte olması gerekmez kendiliğinden yaratır.


a+ : Var olan bir dosyanın sonuna ekleme yapabilirsiniz ve okuma yapabilirsiniz.


Örnek vermek gerekirse ;


FILE *yol;
yol = fopen(“belge”,”w”);
if(yol==NULL){
printf(“Dosya açılamıyor..”);
exit(1);
}


Verdiğim örnekte gösterici ismi olarak “yol” kullandım. Bu programı bence daha anlaşılır yapmaktadır. Birnevi dosyaya giden yol anlamında “yol”.
Bu programcık “belge” isminde bir dosyayı “w” modunda yani write modunda açmaya çalışıyor.Ve hemen sonra acaba bu dosya açılabildimi? diye kontrol ediyor. Açılamadıysa ekrana “dosya açılamıyor” mesajı veriyor ve if deyiminden çıkıyor.
Bu programcığı çalıştırırsanız ekranda “dosya açılamıyor” diye bir sorun almayacaksınız. Çünkü “w” modunu kullandığımız için “belge” diye bir dosya diskinizde mevcut olmasa bile otomatik olarak oluşturulacaktır.


Programı daha kısa hale getirmek için kontrol işlemini tek satırda yani fopen’ı if içinde kontrol ettirmeniz mümkün. yani :
if((yol=fopen(“belge”,”w”))==NULL)
şeklinde kullanabilirsiniz.


Bir dosya açıldığında dosya pointerı (göstericisi) otomatik olarak dosyanın başına alınır. Sıfırıncı Ofset’e.


Açtığımız bir dosya ile işimiz bittiğimizde ise onu kapamamız sağlık açısından iyi olur 🙂 Ama şart değildir. Yine de kapatılsa iyi olur. Çünkü yazma işlemi yapılmışsa eğer kapatılmazsa bazı sorunlar çıkabilir.


Dosyayı kapatmak için fclose(); fonskiyonunu kullanağız. Yukarıdaki örnekteki açtığımız dosyayı kapatmak içim fclose(yol); yazmamız yeterlidir. Gayet basittir.


belgesi-380

Belgeci , 2280 belge yazmış

Cevap Gönderin