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 55 fseek(), ftell(), rewind() Fonksiyonları

C Dili Dersleri - Okan Bilke

Ders 55 fseek(), ftell(), rewind() Fonksiyonları

Mesajgönderen okanbilke » 06 Mar 2014 03:27

Ders 51 Dosyadan Veri Okumak dersinde dosya sonu kavramını incelerken konum göstergeci isminde bir kavramdan bahsetmiştik. Konum göstergeci, bir dosya açıldığında dosya başında bulunur ve dosyaya yapılan her okuma ve yazma işleminde okunan veya yazılan karakter sayısı kadar ilerler. Bu yüzden bir dosyadan üst üste iki karakteri okuduğumuzda önce dosyadaki ilk karakteri, sonra ikinci karakteri elde etmiş oluruz. Çünkü biz ilk karakteri okuduğumuzda dosya konum göstergeci de ikinci karaktere geçer böylece ikinci kez okuma işlemi yaptığımızda bu sefer konum göstergecinin üstünde olduğu ikinci karakteri okumuş oluruz. Eğer konum göstergeci hiç ilerlemeseydi sürekli ilk karakteri okuyor olurduk.
Dosya konum göstergeci her okuma ve yazma işleminde kendiliğinden ilerler ancak bazı durumlarda göstergecin durumuna müdahale etmek isteyebiliriz. İşte konum göstergecini bu dersimizde göreceğimiz fseek(), ftell() ve rewind() fonksiyonları ile kendimiz kontrol edebileceğiz.

fseek() Fonksiyonu
fseek() fonksiyonu, dosya konum göstergecini istediğimiz miktarda ileri veya geri götürmemizi sağlar. Fonksiyon başarılı olursa 0(sıfır) değerini döndürür. Başarısızlık durumunda sıfırdan farklı bir değer döner. Fonksiyonun prototipi şu şekildedir:
int fseek(FILE *akis, long miktar, int baslangic);

akis parametresi, üzerinde çalışılacak dosyayı belirtir. miktar parametresi ise konum göstergecinin kaç karakter götürüleceğini belirtir. Negatif değer verildiğinde göstergeç geri, pozitif değer verildiğinde göstergeç ileri hareket eder. Son parametre olan baslangic parametresi ise konum göstergecinin hareket etmeye nereden başlayacağı bilgisini gösterir. Bu parametrenin alabileceği üç değer vardır: 0, 1 ve 2. Sıfır değeri dosya başını ifade eder. Eğer bu parametre yerine 0(sıfır) değeri kullanılırsa konum göstergeci önce dosya başına konumlanır, daha sonra miktar parametresi ile belirtilen miktarda hareket eder. Eğer baslangic parametresinin değeri 1 olursa göstergeç bulunduğu aktif konumdan itibaren hareket eder. Son olarak eğer parametrenin değeri 2 olursa, konum göstergeci hareketine dosya sonundan başlar. Bu 0,1 ve 2 değerleri stdio.h dosyası içerisinde tanımlanmıştır:
#define SEEK_CUR 1  // Dosya başı
#define SEEK_END 2 // Bulunduğu nokta
#define SEEK_SET 0 // Dosya sonu

Programlarda 0, 1 ve 2 değerleri yerine bu değerlerin karşılıkları olan SEEK_SET, SEEK_CUR, SEEK_END ifadelerini kullanacağız.

ftell() Fonksiyonu
ftell() fonksiyonu, dosya konum göstergecinin Byte olarak o anda nerede olduğunu gösterir. Başarısızlık durumunda -1 döner. Prototipi şu şekildedir:
long ftell(FILE *akis);


rewind() Fonksiyonu
Bu fonksiyon dosya konum göstergecinin dosyanın başına konumlandırılmasını sağlar. Prototipi:
void rewind(FILE *akis);

Şimdi aşağıdaki text dosyasını oluşturalım ve üzerinde çalışacağımız programı yazalım. Text dosyasının ismini konum_gostergeci_ornek.txt olarak belirleyebilirsiniz.
Resim

Şimdi bu dosya üzerinde çalışacak programımızı yazalım. Program üzerinde fseek(), ftell(), rewind() fonksiyonlarının çalışmasını inceleyeceğiz.
//konum_gostergeci.c - 06.03.2014 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{
FILE *ptDosya;
char satir[200];
float say_veri;

// dosyayı aç:
if((ptDosya = fopen("C:\\konum_gostergeci_ornek.txt", "r")) == NULL)
{
printf("dosya acilamadi!");
return 0;
}

// konum gostergecinin ilk yeri:
printf("konum gostergecinin yeri: %d\n\n", ftell(ptDosya));

// bir karakter oku:
printf("bir karakter okunuyor...\n");
fgetc(ptDosya);

// konum göstergecinin şimdiki yeri:
printf("konum gostergecinin yeri: %d\n\n", ftell(ptDosya));

// konum göstergecini ikinci satırın başına gönder:
printf("konumu ikinci satirin basina gotur:\n");
fseek(ptDosya, 40, SEEK_SET);

// konum göstergecinin şimdiki yeri:
printf("konum gostergecinin yeri: %d\n\n", ftell(ptDosya));

printf("bu satiri oku ve ekrana yazdir:\n");
fgets(satir, 200, ptDosya);
printf("%s", satir);

// konum göstergecinin şimdiki yeri:
printf("konum gostergecinin yeri: %d\n\n", ftell(ptDosya));

// konum göstergecini dosya başına götür:
printf("konum gostericisi dosya basina gidiyor...\n");
rewind(ptDosya);
printf("konum gostergecinin yeri: %d\n", ftell(ptDosya));

fclose(ptDosya);
return 0;
}
//bu dosya elektroarge.com'dan indirilmiştir.

Programın ekran çıktısı:
konum gostergecinin yeri: 0

bir karakter okunuyor...
konum gostergecinin yeri: 1

konumu ikinci satirin basina gotur:
konum gostergecinin yeri: 40

bu satiri oku ve ekrana yazdir:
eteklerinde gunes rengi bir yigin yaprak
konum gostergecinin yeri: 82

konum gostericisi dosya basina gidiyor...
konum gostergecinin yeri: 0

Programda gerçekleştirdiğimiz her adım program içinde yorumlarla açıklandığından burada tekrar açıklamayacağız.


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

DERS 56 fread() FONKSİYONU

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