Dosya İşlemleri #7 – C Programlama Dili

C Programlama dili derslerinde dosya işlemleri konusunun sonlarına geldik. Bu dersimizde bazı kontrol fonksiyonları üzerinde duracağız.
feof() ve ferror() Fonksiyonu
feof() fonksiyonu bahsettiğim kontrol fonksiyonlarından biridir. Dosyadaki bilgilerin tümünün okunup okunmadığı bilgisini gösterir.
Dosya okuma işlemlerinde bir dosya açıldığında bilgiler sırayla okunur. File pointer her okumada yeni okuyacağı adresi alır. Herhangi bir kontrol yapılmadığı takdirde bu işlem diskteki kayıt ünitesi üzerindeki adreslerin sonuna kadar sürer. Dosyanın sonuna gelinip gelinmediği bilgisini feof() fonksiyonu ile kontrol edebilirsiniz.
feof() fonksiyonunu aklınızda function-end-of-file şeklinde kodlayabilirsiniz. fgetc () fonksiyonu gibi okuma işlemi yapan herhangi bir fonksiyonla kullanabilirsiniz.
fgetc () fonksiyonu iki durumda EOF değerini geri döndürür :
- Bir hata meydana geldiğinde
- Dosya sonuna gelindiğinde
Ancak bu durumlardan hangisi için EOF değeri döndüğünü bilemezsiniz. fgetc() tarafından geri döndürülen EOF değerinin hangi durum için döndüğünü anlamak için feof() ve ferror() fonksiyonları kullanılır.
feof() fonksiyonunun prototipi aşağıdaki gibi tanımlanmıştır :
int feof( FILE *fpointer);
ferror() fonksiyonunun prototipi ise aşağıdaki gibi tanımlanmıştır :
int ferror( FILE *fpointer);
feof() fonksiyonu parametre olarak aldığı filePointer ile gösterilen dosyanın sonuna geldiğinde 0(sıfır) olmayan bir değer ile dönerken diğer durumlarda sıfır değeri döndürür. feof() fonksiyonunu hem binary files hem de text files ile kullanabilirsiniz.
ferror() fonksiyonu ise filePointer ile gösterilen dosyada bir hata bulursa 0(sıfır) olmayan bir değer döndürürken, hata olmadığı durumlarda 0(sıfır) değerini döndürür.
Ayrıca ferror() fonksiyonu en son dosya girişinden sonra hata kontrolü yaptığı için her dosya işleminden sonra bu fonksiyonu tekrar çağırmanız gerekir.
Bu kadar açıklamadan sonra bu fonksiyonların nasıl kullanıldığını görebileceğimiz bir uygulama yapalım.
Uygulama hakkında konuşalım. main() fonksiyonunun başında aşağıdaki bildirimleri görüyoruz :
char ch ;
FILE *fpointer;
char *chString = "C Programlama Dersleri - Dosya Islemleri";
İlk kod ile char tipinde adı ch olan bir değişken tanımı yapılmış. Sonrasında FILE tipinde bir file pointer tanımı görüyoruz adı fpointer olan. Son satırda ise ilk değer ataması yapılmış olan bir karakter dizisi görüyoruz.
fpointer = fopen("deneme.txt", "w");
kodu ile deneme.txt dosyası fopen() fonksiyonu kullanılarak yazma modunda açılmıştır.
Dosya açma işleminin başarılı olup olmadığının sorgusu ise sonrasında kullanılan if() yapılarında yapılmaktadır.
Dosyamız yazma modunda başarılı bir şekilde açılmışsa aşağıdaki kodlar çalışacaktır :
while döngüsünde karakter dizisinin son karakterinin sorgusu yapılmaktadır. Son karakter dışındakiler EOS olmayacağından 1 kabul edilecektir ve döngü string boyunca devam edecektir, string sonuna geldiğinde ise döngüden çıkılacaktır.
While bloğu içerisinde ise fputc() fonksiyonunun kullanımını görüyoruz. Sonrasındaki ifade ise karakter dizisinin adresini artırmak için kullanılmıştır. ( chString++ )
Son olarak da fclose() fonksiyonu ile dosyamızı kapattıktan sonra printf() fonksiyonu ile kullanıcıya “dosya yazma işlemi basarili…” mesajı verilmektedir.
Uygulamanın yazma kısmı böylelikle bitmiştir. deneme.txt dosyasına "C Programlama Dersleri - Dosya Islemleri" string ifadesi yazılmıştır.
Uygulamamızın ikinci bölümünde ise yazdığımız dosyayı okumaya çalışacağız.
fpointer = fopen("deneme.txt", "r");
kodu ile deneme.txt dosyasını okuma modunda açıyoruz.
Sonrasında dosyamızın açılıp açılmadığına dair gerekli if sorguları yapılmaktadır. Eğer deneme.txt dosyası okuma modunda başarılı bir şekilde açılmışsa aşağıdaki kodlar işlenecektir :
while döngüsü kullanarak string dizisini karakter karakter okuma işlemi yapacağız. while döngüsü içinde feof() fonksiyonunun durumu sorgulanmıştır. feof() fonksiyonu dosya sonuna gelmediği sürece sıfır(0) değeri döndürüyordu. Bu mantıktan yola çıkarak bu fonksiyonun geri döndürdüğü değerin tersi alınmıştır. Böylelikle while döngüsü dosya sonuna gelene kadar dönecektir.
Sonrasında fgetc() fonksiyonu ile okunan her karakter ch değişkenine atandıktan sonra printf() fonksiyonu ile ekrana yazdırılacaktır.
printf() fonksiyonundan sonra gelen if() yapısı içindeki ifadeye dikkat edelim. Burada ferror() fonksiyonunun geri dönüş değeri kullanılmıştır. ferror() fonksiyonu ise filepointer ile gösterilen dosyada bir hata olursa sıfır dışında bir değer döndürüyordu.
Bu durumda olası bir hata durumunda bu if() sorgusuna girilecek ve hata mesajı verildikten sonra break; deyimi ile döngüden çıkılacaktır.
Uygulamanın sonunda da fclose() fonksiyonu ile açılan dosya kapatılmıştır.
Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.
Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.
Kaynak belirtilmeyen görseller @etasarim a aittir. / Pictures that don’t have any source belongs to @etasarim.
Posted from my blog with SteemPress : http://etasarim.cloudaccess.host/15/04/2019/dosya-islemleri-7-c-programlama-dili/
Dosya işlemlerinde dosya fonksiyonları kadar kontrol fonksiyonları da oldukça önem arz ediyor. Gerekli kontroller yapılmadığı takdirde çok alakası ne olduğu belli olmayan sonuçlar alabiliyorsunuz.
Bu yazı Curation Collective Discord Sunucusunda küratörlere önerilmiş ve manuel inceleme sonrasında @c-squared topluluk hesabından oy ve resteem almıştır.
This post was shared in the #turkish-curation channel in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.
@c-squared runs a community witness. Please consider using one of your witness votes on us here
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by etasarim from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.