C dasturchisi matnli faylni yoki ikkilik faylni qanday yaratishi, ochishi va yopishini tavsiflaydi.
Fayl matnli fayl yoki ikkilik fayl bo'ladimi, C tili nafaqat yuqori darajadagi funktsiyalarga kirishni ta'minlabgina qolmay, balki saqlash qurilmasidagi fayllarni qayta ishlash uchun asosiy (OS) chaqiruvini ham ta'minlaydi. . Ushbu bobda hujjat boshqaruvidagi muhim qo'ng'iroqlar tushuntiriladi.
ochiq fayl
Odatda yangi fayl yaratish yoki mavjud faylni ochish uchun fopen () funksiyasidan foydalangan holda, bu chaqiruv oqimni boshqarish uchun barcha kerakli ma'lumotlarni o'z ichiga olgan FILE tipidagi ob'ektni ishga tushiradi. Mana bu funksiya chaqiruvining prototipi:
FILE *fopen (const char * fayl nomi, const char * rejimi);
Bu erda fayl nomi faylga nom berish uchun satr bo'lib, kirish rejimining qiymati quyidagi qiymatlardan biri bo'lishi mumkin:
naqsh | tavsifi |
r | O'qishga ruxsat beruvchi mavjud matn faylini oching. |
w | Faylga yozish imkonini beruvchi matn faylini oching. Agar fayl mavjud bo'lmasa, yangi fayl yaratiladi. Bu yerda dasturingiz faylning boshidan tarkibni yozadi. Agar fayl mavjud bo'lsa, u nol uzunlikka qisqartiriladi va qayta yoziladi. |
a | Matn faylini oching va faylga qo'shish rejimida yozing. Agar fayl mavjud bo'lmasa, yangi fayl yaratiladi. Bu erda sizning dasturingiz mavjud bo'lgan fayllarga tarkibni qo'shadi. |
r+ | Faylni o'qish va yozish imkonini beruvchi matn faylini oching. |
w+ | Faylni o'qish va yozish imkonini beruvchi matn faylini oching. Agar fayl allaqachon mavjud bo'lsa, fayl nol uzunlikka qisqartiriladi va agar fayl mavjud bo'lmasa, yangi fayl yaratiladi. |
a+ | Faylni o'qish va yozish imkonini beruvchi matn faylini oching. Agar fayl mavjud bo'lmasa, yangi fayl yaratiladi. O'qish fayl boshidan boshlanadi va yozish faqat qo'shish rejimida bo'ladi. |
Ikkilik fayl qayta ishlansa, yuqoridagilarni almashtirish uchun quyidagi kirish rejimidan foydalaning:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
yopiq fayl
Faylni yopish uchun fclose() funksiyasidan foydalaning. Funktsiyaning prototipi quyidagicha:
int fclose (FILE *fp );
- Agar fayl muvaffaqiyatli yopilsa, fclose() funktsiyasi nolni qaytaradi va agar xato EOFni qaytarsa. Bu funktsiya, aslida, buferdan ma'lumotlarni olib tashlaydi, faylni yopadi va ushbu fayl uchun ishlatiladigan barcha xotirani chiqaradi. EOF stdio.h sarlavha faylida aniqlangan doimiydir
C standart kutubxonasi fayllarni belgilar bo'yicha yoki belgilangan uzunlikdagi qator sifatida o'qish va yozish uchun turli funktsiyalarni taqdim etadi.
Faylga yozing
Oqimga belgilar yozish uchun eng oddiy funksiyalar:
int fputc ( int c , FILE * fp );
fputc () funksiyasi c parametrining belgi qiymatini fp ko'rsatgan chiqish oqimiga yozadi. Agar yozish muvaffaqiyatli bo'lsa, u yozma belgini va xatolik yuzaga kelsa, EOFni qaytaradi. Oqimga null bilan tugaydigan satr yozish uchun quyidagi funksiyadan foydalanishingiz mumkin:
int fputs (const char *s, FILE *fp);
fputs () funktsiyasi fp ko'rsatadigan chiqish oqimiga s qatorini yozadi. Agar yozish muvaffaqiyatli bo'lsa, u salbiy bo'lmagan qiymatni va xatolik yuzaga kelsa, EOFni qaytaradi. Bundan tashqari, int fprintf (FILE * fp, const char * format,...) funksiyasidan ham foydalanishingiz mumkin, faylga satr yozadi. Quyidagi misolni sinab ko'ring:
Eslatma: Sizda mavjud tmp katalogi mavjudligiga ishonch hosil qiling va agar u mavjud bo'lmasa, avval uni kompyuteringizda yaratishingiz kerak.
/ tmp odatda Linux tizimidagi vaqtinchalik katalog hisoblanadi. Agar siz Windows tizimida ishlayotgan bo'lsangiz, uni mahalliy muhitda mavjud bo'lgan katalogga o'zgartirishingiz kerak, masalan: C: \ tmp, D: \ tmp va boshqalar.
tirik misol
#o'z ichiga oladi
Yuqoridagi kod kompilyatsiya qilinganda va bajarilganda, u / tmp katalogida test.txt yangi faylini yaratadi. Va ikki xil funksiyadan foydalangan holda ikki qatorga yozadi. Keling, ushbu faylni keyinroq o'qib chiqamiz.
Faylni o'qing
Quyida fayldan bitta belgini o'qish uchun eng oddiy funksiya mavjud:
int fgetc (FILE * fp);
fgetc () funktsiyasi kirish faylidan fp ko'rsatadigan belgini o'qiydi. Qaytish qiymati o'qish belgisi va agar xatolik yuzaga kelsa, EOF hisoblanadi. Quyidagi funksiya oqimdan satrni o'qish imkonini beradi:
char *fgets (char *buf, int n, FILE *fp);
fgets () funktsiyasi fp tomonidan boshqariladigan kirish oqimidan n-1 belgilarni o'qiydi. U o'qilgan satrni bufer bufiga ko'chiradi va satrni tugatish uchun oxiriga null belgi qo'shadi.
Agar bu funktsiya oxirgi belgini o'qishdan oldin '\ n' singan chiziq belgisiga yoki fayl oxiridagi EOFga duch kelsa, u holda faqat o'qilgan belgilarga, shu jumladan qator tanaffuslariga qaytariladi. Fayldan satrni o'qish uchun int fscanf (FILE * fp, const char * format,...) funksiyasidan ham foydalanishingiz mumkin, lekin u birinchi bo'shliq va qator uzilishiga duch kelganda o'qishni to'xtatadi.
tirik misol
#o'z ichiga oladi
Yuqoridagi kod kompilyatsiya qilinganda va bajarilganda, u oldingi bo'limda yaratilgan fayllarni o'qiydi va quyidagi natijalarni beradi:
1: Bu 2: fprintf uchun sinovdan o'tkazilmoqda ...
3: Bu fputs uchun sinov ...
Birinchidan, fscanf() usuli faqat This ni o'qiydi .chunki u orqada bo'sh joyga duch keladi. Ikkinchidan, qolgan qismini chiziq oxirigacha o'qish uchun functon fgets () ni chaqiring. Va nihoyat, ikkinchi qatorni to'liq o'qish uchun fgets () ga qo'ng'iroq qiling.
Ikkilik kiritish-chiqarish funktsiyasi
Ikkilik kiritish va chiqish uchun quyidagi ikkita funktsiyadan foydalaniladi:
size_t fread (void *ptr , size_t size_of_elementlar , size_t elementlarning_soni , FILE *a_file ); size_t fwrite (const void *ptr , size_t size_of_elementlar , size_t elementlarning_soni , FILE *a_file );
Ikkala funktsiya ham saqlash bloklari uchun o'qiladi va yoziladi - odatda massivlar yoki tuzilmalar.
Yuqorida C faylini o'qish va yozish HDV Phoelectron Technology Ltd.ga tegishli bo'lib, dasturiy ta'minot texnik operatsiyasi. Va tarmoq bilan bog'liq uskunalar uchun kompaniya (masalan: ACONU/ aloqaONU/ aqlliONU/ tolaONU, va hokazo) kuchli dasturiy ta'minot jamoasini birlashtirdi, har bir mijoz uchun unga muhtoj bo'lgan eksklyuziv talablarni moslashtirdi, shuningdek, mahsulotlarimizni yanada aqlli va ilg'or qilishiga imkon bering.