PDA

Tam Sürümünü Görmek İçin : dosya okumak


yastasinane
18/10/2006, 23:16
slmlar,
elimdeki bir dosyayi sondan okumam gerekiyor ve bunun icin soyle kod yazdim;

fseek(f, -128, SEEK_END);
char x[128];
while(!feof(f))
{
s = s + fgets(x, 128, f);
}

burada soyle bir sorunla karsilasiyorum, dosyada paragraf basina kadar okuma yapiyor yani "\n" gordugu zaman okumayi tamamliyor.
ornegin dosyanin sonu;

ceviz
net

ise bu kod bana sadece "ceviz" kismini okuyor. aslinda yapmamasi lazim.
sorun sizce nedir ? bu arada okumaya calistigim bir "mp3" dosyasi bunu da belirtim.


acehreli
19/10/2006, 01:44
s'in ne oldugunu ve nasil kullandigini bilmiyorum.

fgets zaten satir sonuna kadar okur...

Ayrica fgets'in dOnUs degerini gozardi edip kullaniyorsun. feof denetimin de yanlis noktada, cunku fgets dosya sonuna geldigi icin basarisiz olmus olabilir.

Yani once fgets'in dOnUsune bak. Eger NULL'sa ya dosya sonuna gelmissindir ya da bir hata olusmustur. Hata degerini de errno'dan ogrenebilirsin.

fgets'in man sayfasinda soyle bir ornek var:


#include <stdio.h>
...
char line[LINE_MAX];
...
while (fgets(line, LINE_MAX, fp) != NULL) {
...
}
...


Surada:

http://www.die.net/doc/linux/man/man3/fgets.3.html

Ali

yastasinane
19/10/2006, 03:54
oncelikle cevabin icin tesekkurler. ancak yazdigim kodlar normal bir dosyada problem cikartmiyor. bunun icin ozellikle mp3 dosyasi oldugunu belirtmistim. sorunun neden kaynaklandigini teknik olarak aciklayamasamda, garip bir sekilde yaratilan byte bolumlerini parca parca okuyunca mp3 dosyasinda da problem cikmadi. yani yukardaki kodumu end of file degilde belirli byte parcalari halinde okuttum. cunku dosyanin yapisi bu sanirim. dedim gibi teknik olarak aciklayamiyorum - aklim ermedi.

acehreli
20/10/2006, 01:53
mp3 gibi bir dosyayi herhalde 'binary' olarak acman gerekir:

fopen("deneme.mp3", "rb");

Sorunu gosteren ufak bir kod parcasi gormeden bundan baskasi aklima gelmiyor. :(

Ali