20.Mavzu: Fayllar bilan ishlashning yangi usullari (I/O
texnologiyasi).
C++ da fayllar bilan ishlash
Ma`lumotlarni saqlab qo`yish uchun, tashqi xotiraning nomlangan qismiga fayl
deyiladi. Bunday fayllar fizik fayllar deyiladi.
Mantiqiy fayllar. Fizik
fayllar bilan ishlash uchun, programmalashtirish tillarida
maxsus strukturalashgan, toifalangan fayllar kiritilgan. Bunday fayllar mantiqiy
(logicheskiy) fayllar deyiladi.
Mantiqiy fayllar, hech qanday fizik xotirani band
qilmasdan ma`lumotlarning mantiqiy modelini o`zida saqlaydi.
Fizik va mantiqiy fayllar bir - biri bilan fopen funksiyasi orqali bog'lanadi.
Fayl bir nechta elementdan tashkil topgan bo`lganligi uchun, faqat fayl ko`rsatkichi
ko`rsatayotgan elementga murojaat qilish mumkin. Fayldan o'qish yoki yozish
mumkin bo'lgan o'rinni ko'rsatuvhi elementga fayl ko'rsatkichi deyiladi.
Fayldan
ma'lumot o'qiganda yoki yozganda fayl ko'rsatkichi avtomat ravishda o'qilgan yoki
yozilgan bayt miqdoricha siljiydi. Fayl ko'rsatkichini magnitafon galovkasiga
o'xshatish mumkin.
Binar fayl - har xil ob'ektlarni ifodalovchi baytlar ketma - ketligidir. Ob'ektlar faylda
qanday ketma - ketlikda joylashganini programmaning o'zi aniqlashi lozim. Fayllar
bilan ishlovchi funksiyalardan
foydalanish uchun sarlavha faylini
programmaga qo'shish kerak bo'ladi.
Fayldan ma'lumotlarni o'qish yoki yozish uchun ochish fopen funksiyasi orqali
amalga oshiriladi.
FILE * fopen ( const char * filename, const char * mode );
filename - o'zgaruvchisi char toifasidagi satr bo'lib, faylning to'liq nomini ko'rsatishi
lozim
(filename = "D:\c++\misol.txt"). Agar faylning faqat nomi ko'rsatilgan bo'lsa, fayl
joriy katalogdan qidiriladi (filename = "misol.txt").
mode - o'zgaruvchisi ham char toifasidagi satr bo'lib, faylni qaysi xolatda ochish
lozimligini bildiradi. mode qiymati faylning ochilish xolati faylni yozish uchun ochish.
falename o'zgaruvchisida ko'rsatilgan fayl hosil qilinadi va unga ma'lumot yozish
mumkin"w" bo'ladi. Agar fayl oldindan bor bo'lsa (ya'ni oldin hosil qilingan bo'lsa),
faylning ma'lumotlari o'chiriladi va yangi bo'sh fayl faqat yozish uchun ochiq holda
bo'ladi. Fayl o'qish uchun ochiladi. Agar fayl oldindan mavjud bo'lmasa,"r" xatolik
sodir bo'ladi. Ya'ni ochilishi lozim bo'lgan fayl oldindan hosil qilingan bo'lishi shart.
Faylga yangi ma'lumotlar qo'shish - kiritish uchun ochiladi."a"Yangi kiritilgan
ma'lumotlar fayl oxiriga qo'shiladi. Agar fayl
oldindan mavjud bo'lmasa, yangi fayl hosil qilinadi. Yozish va o'qish
uchun faylni
ochish. Agar fayl oldindan bor bo'lsa (ya'ni oldin hosil qilingan bo'lsa), faylning
ma'lumotlari "w+"o'chiriladi va yangi bo'sh fayl yozish va o'qish uchun ochiqholda
bo'ladi. "r+"Oldindan mavjud bo'lgan faylni o'qish va yozish uchun ochish. Fayl
ma'lumotlarni o'qish va yangi ma'lumot qo'shish uchun "a+" ochiladi. fseek, rewind
faylni ochishda xatolik sodir bo'lsa, fopen funksiyasi NULL qiymat qaytaradi.
Ochilgan faylni yopish uchun fclose funksiyasi ishlatiladi.
int fclose ( FILE * stream );
Faylni yopishda xato sodir bo'lmasa, fclose funksiyasi nol qiymat qaytaradi. Xato
sodir bo'lsa, EOF - fayl oxiri qaytariladi.
Faylga ma'lumot yozish va o'qish size_t fread ( void * ptr, size_t size, size_t n, FILE *
stream ); fread
funksiyasi, fayldan ptr ko'rsatkichi adresiga size xajmdagi
ma'lumotdan n tani o'qishni amalga oshiradi. Agar o'qish muvoffaqiyatli amalga oshsa
fread funksiyasi o'qilgan bloklar soni n ni qaytaradi. Aksholda nol qaytariladi size_t
fwrite ( const void * ptr, size_t size, size_t n, FILE * stream ); fwrite funksiyasi,
faylga ptr ko'rsatkichi adresidan boshlab size xajmdagi ma'lumotdan n tani yozishni
amalga oshiradi.
Misol 1. fread va fwrite funksiyalarining qo'llanilishi