Oqim ochilishi uchun, oldindan kiritilgan FILE tipidagi struktura bilan bog`lash lozim. FILE strukturasi ta'rifi iostream.h bibliotekasida joylashgan. Bu strukturada buferga ko’rsatkich, o’qilayotgan pozitsiyaga ko’rsatkich va boshqa ma'lumotlar saqlanadi. Oqim ochilganda dasturda oqimga ko’rsatkich ya'ni FILE strukturali tipdagi ob'ektga ko’rsatkich qaytariladi. Bu ko’rsatkich qo’yidagicha e'lon qilinishi lozim.
FILE * Misol uchun FILE * fp
Oqim ochish funksiyasi quyidagi ko’rinishga ega;
=foren(,) Misol uchun:fp=fopen(“t.tnt”, “r”)
Oqim bilan bog’liq faylni quyidagi rejimlarda ochish mumkin:
“ w”- Yangi fayl o’qish uchun ochiladi. Agar fayl mavjud bo’lmasa yangidan yaratiladi.
“r” - Mavjud fayl faqat o’qish uchun ochiladi. “a” - Fayl davom ettirish uchun ochiladi.
“wt” - Fayl yozish va tahrirlash uchun ochiladi. Faylni ixtiyoriy joyidan o’qish yoki yozish mumkin.
“rt”- faylni ixtiyoriy joyidan o’qish yoki yozish mumkin, lekin fayl oxiriga qo’shish mumkin emas.
“at” - Fayl ixtiyoriy joyidan o’qish va yozish uchun ochiladi “wt” rejimidan farqli ravishda fayl oxiriga ma'lumot qo’shish mumkin.
Oqim ochilganda quyidagi xatolar kelib chiqishi mumkin: ko’rsatilgan fayl mavjud emas (o’qish rejimida); disk to’la yoki yozishdan himoyalangan va hokazo. Yana shuni aytish kerakki fopen() funksiyasi bajarilganda dinamik xotira ishlatiladi. Agar xotirada joy qolmagan bo’lsa “not enough ” - xatosi kelib chiqadi.
Ko’rsatilgan hollarda ko’rsatkich ~ NULL qiymatga ega bo’ladi.
Bu xatolar haqidagi ma'lumotlarni ekranga chiqarish uchun perror() funksiyasi ishlatiladi. Bu funksiya iostream.h bibliotekasida saqlanuvchi prototipi quyidagi ko’rinishga ega.
Void perror(court char * s);
Fayllar bilan ishlashning bitli rejimi.
Fayl bilan bitli almashish rejimi gets() va puts() funksiyalari yordamida tashkil etiladi. Bu funksiyalarga qo’yidagi shaklda murojat etiladi:
C=gets(fp); Puts(c,fp);
Bu yerda fp - ko’rsatkich C-int tipidagi o’zgaruvchi
Misol tariqasida klaviaturadan simvol kiritib faylga yozishni ko’ramiz. Matn oxirini ‘#’ belgisi ko’rsatadi. Fayl nomi foydalanuvchidan so’raladi. Agar klavishasi bosilsa, faylga CR va LF (qiymatlari 13 va 10) konstantalar yoziladi. Keyinchalik fayldan simvollarni o`qishda bu konstantalar satrlarni ajratishga imkon beradi.
#include int main()
{ file *fp; char c;
const char CR=’\015’; const char LF=’\012’; char f name [20];
puts(“fayl nomini kiriting:\n”); gets(f name);
if((fp=f open(f name, “w”)) ==null)
{ perror(f name); return 1;
}
while ((c=getchar())!=’#’)
}
if (c==’\n’)
{ puts(CR,fp);
puts(LF,fp);
}
else puts (c,fp);
}
Fclose (fp); Return 0;
Keyingi programma fayldan simvollarni o’qib ekranga chiqaradi.
#include int main()
{ file *fp;
char c;
char f name [20];
puts(“fayl nomini kiriting:\n”); if((fp=f open (f name, “r”)) ==null)
{ perror(f name); return 1;
}
while ((c=getc(fp))!=eof) putchar(c);
f close (fp); return 0;
}
Satrlar yordamida fayllar bilan bog’lanish.
Matnli fayllar bilan ishlash uchun fget va fputs funksiyalaridan foydalaniladi. Bu funksiyalari prototiplari iostream.h faylida qo’yidagi ko’rinishga ega:
Int fputs (const char *s, FILE *stream); Char *fgets (char * s, int n, FILE * stream);
Fputs funksiyasi ‘\0’ simvoli bilan chegaralangan satrni stream ko’rsatkichi orqali aniqlangan faylga yozadi. ‘\0’ simvoli faylga yozilmaydi.
Fgets() funksiyasi stream ko’rsatkichi orqali aniqlangan fayldan (n-1) simvolni o’qiydi va S ko’rsatgan satrga yozib qo’yadi. Funksiya n-1 simvolni o’qib bo’lsa yoki 1-chi qator simvoli ‘\n’ni uchratsa ishini to`xtatadi. Har bir satr oxiriga qo’shimcha \0 belgisi qo’shiladi. Xato bo’lganda yoki fayl oxiriga yetganda agar fayldan birorta simvol o’qilmagan bo’lsa NULL qiymat qaytariladi. Qo’yidagi dasturda bir fayldagi matnni ikkinchi faylga yozishni ko’rib chiqiladi. Har qanday dastur operatsion sistemada ma'lumotni argc va argv parametrlar qiymati sifatida oladi. Birinchi programmaga uzatilayotgan satrlar sonini ko’rsatadi. Argv[0] bu faylning nomini saqlovchi satrga ko’rsatkich massivining qolgan elementlari argv[10]…argv[argc-1] komanda qatorida fayl nomidan so’ng bo’shlik tashlab yozilgan parametrlarga ko’rsatkichlar.
Programma nomi copyfile.exe bo’lsin va bu programma yordamida f1.dat faylni f2.dat faylga yoziladi. Komanda qatori qo’yidagi ko’rinishga ega:
Programma matni:
#include main (int argc, char*argv[])
{ char cc[256]; FILE *f1, *f2; If (argc!=3)
{ print (“\n Format bazovix programm:”); print f (“\n copyfile.exe”)
Cout<< (“\n Fayl priyomnik”); return 1;
}
if ((f1=fopen(argv[1],”r”))==NULL)
{perror(argv[1]); return 1;
}
if ((f2=fopen(argv[2], “w”))==NULL)
{perror(arg[2]); return 1;
}
while (fgets(cc,256,f1)!=NULL) fputs(CC,f2);
fclose(f1); fclose(f2); return 0;
}
Bu dastur bajarilishi natijasida int.dat fayliga Cout<< funksiyasi yordamida
monitorga qanday chiqsa shunday ko’rinishda ma'lumotlar yozadi.