Çözüldü C dosya boyutu bulmak

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

soon

Hectopat
Katılım
16 Şubat 2021
Mesajlar
581
Çözümler
3
Merhaba.

Sorum şu, neden bu iki kod aynı işi yapmıyor? while ile olanda eksik nedir?

C:
int size=0;
fseek(filep,0,SEEK_END);
        size=ftell(filep);
C:
int size=0;
while(!feof(filep))
        size++;
 
Son düzenleme:
Çözüm
Dosyayı "read" modunda açıyorum zaten, curve dosyanın ilk sütununu işaret ediyor. Aynı şeyi yapmıyor mu?

Dosyayı açtıktan sonra okuma işlemi yapmadığınız ya da fseek ve fsetpos gibi fonksiyonlar ile spesifik bir pozisyona getirmediğiniz sürece oluşturulan dosya handle'ı dosya başlangıç pozisyonunu işaret eder.

Şöyle anlatıyım;

FILE* fp = fopen("file", "r");

şeklinde bir handle oluşturulduğunda bu dosyanın mevcut pozisyonu 0 yani başlangıç pozisyonudur. Bunu ilerletmek için;

fseek(fp, 0, new_pos);

şeklinde yeni bir pozisyona ilerletebilirsiniz ya da;

int c = fgetc(fp);

ile dosya'dan 1 karakter değer okutup yeni pozisyonu +1'e taşıyabilirsiniz.


Yani bu mantıkla, aşağıdaki şekilde yazarak istediğiniz amaca uygun yapabilirsiniz;

int size = 0; while (!feof(fp)) { fgetc(fp); size++; }
Eksik olan şey dosya pozisyonu değiştirme (seek) işlemi yapılmaması. Bu haliyle "while (true) size++;"dan farksız.
 
Eksik olan şey dosya pozisyonu değiştirme (seek) işlemi yapılmaması. Bu haliyle "while (true) size++;"dan farksız.

Dosyayı "read" modunda açıyorum zaten, curve dosyanın ilk sütununu işaret ediyor. Aynı şeyi yapmıyor mu?
 
Dosyayı "read" modunda açıyorum zaten, curve dosyanın ilk sütununu işaret ediyor. Aynı şeyi yapmıyor mu?

Dosyayı açtıktan sonra okuma işlemi yapmadığınız ya da fseek ve fsetpos gibi fonksiyonlar ile spesifik bir pozisyona getirmediğiniz sürece oluşturulan dosya handle'ı dosya başlangıç pozisyonunu işaret eder.

Şöyle anlatıyım;

FILE* fp = fopen("file", "r");

şeklinde bir handle oluşturulduğunda bu dosyanın mevcut pozisyonu 0 yani başlangıç pozisyonudur. Bunu ilerletmek için;

fseek(fp, 0, new_pos);

şeklinde yeni bir pozisyona ilerletebilirsiniz ya da;

int c = fgetc(fp);

ile dosya'dan 1 karakter değer okutup yeni pozisyonu +1'e taşıyabilirsiniz.


Yani bu mantıkla, aşağıdaki şekilde yazarak istediğiniz amaca uygun yapabilirsiniz;

int size = 0; while (!feof(fp)) { fgetc(fp); size++; }
 
Çözüm

Net olarak anladım, teşekkür ederim hocam.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…