7.3. Rastgele Erişim
Normalde, bir dosya açıldıktan sonra, ilk
okuma veya yazma işlemi dosyanın hemen başından yapılır. Bir sonraki işlem
ise, en son işlem tarafından etkilenen son baytı izleyen bayttan başlayarak
yapılır. Bundan dolayı, buna sıralı erişim denir. Bunu yapmadan, yani
önceki baytları okuyup veya yazmadan, istediğimiz bir bayta ulaşmak (yani
rastgele erişim yapmak) için fseek
kullanırız:
fseek(dosya_gostergesi, uzun_sayi, nereden)
Yukarıdaki çağrıda ilk iki argümanın tipleri isimlerinden anlaşılabilir.
nereden
ise ya SEEK_SET
(dosyanın başından),
ya SEEK_CUR
(şu anki konumundan) ya da SEEK_END
(dosyanın sonundan) olabilir. fseek
işletildikten sonra
dosya_gostergesi
tarafından işaret edilen dosya üzerindeki
okuma veya yazma nereden
ile belirtilmiş yerden
uzun_sayi
mesafedeki bayttan başlayacaktır. Eğer herhangi
bir hata olursa, fseek
sıfırdan farklı bir sayı döndürür, aksi
takdirde 0
verir. Bir metin dosyasında bir karakterin
konumunun hesaplanmasının anlamlı yada en azından taşınabilir bir özellik
olmadığına dikkat edin; fseek
tamamen ikili (ham)
girdi ve çıktı içindir.
Eğer, birtakım işlemlerden sonra, dosyanın başından kaç bayt
ileride olduğunuzu öğrenmek isterseniz ftell
kullanın:
uzun_sayi = ftell(dosya_gostergesi)
uzun_sayi
’ya miktarı koyacaktır;
eğer bir hata olursa -1L
verecektir.
Sık sık dosyayı geri sarmak
, yani başına fseek
yapmak isteyebilirsiniz.
rewind(dosya_gostergesi)
bunu yapmanın kısa bir yoludur.