filebuf
C++ filebuf sinfi
Misol
Fayl yaratish uchun filebuf obyektidan foydalaning:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// Create a file
filebuf MyFileBuf;
MyFileBuf.open("filename.txt", ios_base::out);
// Write into the file
MyFileBuf.sputn("Hello World!", 12);
// Close the file
MyFileBuf.close();
}
Ta’rif va qo‘llanilishi
filebuf sinfi fayllardan o‘qish va ularga yozish uchun ishlatiladi. fstream, ifstream va ofstream sinflari ichki tarzda filebuf obyektidan foydalanadi.
filebuf sinfi <fstream> sarlavha faylida aniqlangan.
Fayllar bilan ishlash funksiyalari
Fayllar bilan ishlash funksiyalari fayllarni ochadi va yopadi.
open()
open(filepath, mode) metodi filepath ko‘rsatgan yo‘ldagi faylni ochadi. Agar fayl allaqachon ochiq bo‘lsa, bu metod hech qanday ta’sir ko‘rsatmaydi. mode parametri fayldan qanday foydalanilishini bildiruvchi flaglar to‘plamidir. mode parametrida quyidagi flaglardan foydalanish mumkin:
ios_base::in- Fayl o‘qish uchun ochiladi.ios_base::out- Fayl yozish uchun ochiladi.ios_base::binary- Fayl tarkibi matn sifatida emas, ikkilik (binary) ma’lumot sifatida qaraladi.ios_base::ate- Fayl ochilganda fayl ko‘rsatkichi fayl oxirida turadi.ios_base::app- Yangi ma’lumotlar har doim fayl oxiriga yoziladi.ios_base::trunc- Fayl ochilishi bilanoq uning tarkibi o‘chiriladi.
Flaglarni | operatori yordamida birlashtirish mumkin. Masalan, faylni ham o‘qish, ham yozish uchun ochish uchun quyidagicha yozing: ios_base::in|ios_base::out.
filebuf MyFileBuf;
MyFileBuf.open("filename.txt", ios_base::in|ios_base::out);
is_open()
is_open() metodi boolean qiymat qaytaradi: fayl ochiq bo‘lsa true, hech qanday fayl ochiq bo‘lmasa false.
filebuf MyFileBuf;
cout << MyFileBuf.is_open(); << "\n"; // Displays 0 because the file is not open
MyFileBuf.open("filename.txt");
cout << MyFileBuf.is_open(); << "\n"; // Displays 1 because the file is open
close()
close() metodi faylni yopadi. Resurslarni bo‘shatish uchun fayl bilan ishlashni tugatgach, uni yopib qo‘ygan ma’qul.
MyFileBuf.close();
Fayl ko‘rsatkichi funksiyalari
Fayl ko‘rsatkichlari — faylning qayeridan o‘qish yoki qayeriga yozishni bildiruvchi ichki o‘zgaruvchilar.
Fayl ko‘rsatkichi funksiyalari fayl ko‘rsatkichlarini boshqarish uchun ishlatiladi. O‘qish fayl ko‘rsatkichi va yozish fayl ko‘rsatkichi mavjud, lekin oddiy fayllar uchun filebuf sinfi ikkala amal uchun bitta ko‘rsatkichdan foydalanadi, shuning uchun ulardan birini o‘zgartirish ikkinchisini ham o‘zgartiradi.
pubseekpos()
pubseekpos(position, pointer) metodi fayl ko‘rsatkichini fayl boshiga nisbatan belgilangan pozitsiyaga o‘tkazadi va yangi pozitsiyani qaytaradi. pointer xususiyati quyidagi flaglar yordamida o‘qish ko‘rsatkichini, yozish ko‘rsatkichini yoki ikkalasini ham siljitishni belgilaydi:
ios_base::in- O‘qish ko‘rsatkichini siljitish.ios_base::out- Yozish ko‘rsatkichini siljitish.
Ikkala flagni birlashtirish uchun | operatoridan quyidagicha foydalanish mumkin: ios_base::in|ios_base::out
cout << MyFileBuf.pubseekpos(4, ios_base::in);
pubseekoff()
pubseekoff(offset, origin, pointer) metodi fayl ko‘rsatkichini belgilangan origin nuqtasiga nisbatan offset siljishi bilan berilgan pozitsiyaga o‘tkazadi va yangi pozitsiyani qaytaradi.
origin parametri quyidagi qiymatlardan biri bo‘lishi kerak:
ios_base::beg- Siljish fayl boshiga nisbatan olinadi.ios_base::cur- Siljish fayl ko‘rsatkichining joriy pozitsiyasiga nisbatan olinadi.ios_base::end- Siljish fayl oxiriga nisbatan olinadi.
pointer xususiyati quyidagi flaglar yordamida o‘qish ko‘rsatkichini, yozish ko‘rsatkichini yoki ikkalasini ham siljitishni belgilaydi:
ios_base::in- O‘qish ko‘rsatkichini siljitish.ios_base::out- Yozish ko‘rsatkichini siljitish.
Ikkala flagni birlashtirish uchun | operatoridan quyidagicha foydalanish mumkin: ios_base::in|ios_base::out
cout << MyFileBuf.pubseekoff(-5, ios_base::end, ios_base::in);
Fayldan o‘qish funksiyalari
in_avail()
in_avail() metodi faylda o‘qish uchun mavjud bo‘lgan belgilar sonini qaytaradi.
cout << MyFileBuf.in_avail();
snextc()
snextc() metodi fayl ko‘rsatkichini bir belgi oldinga siljitadi va yangi pozitsiyadagi belgining ASCII qiymatini qaytaradi.
cout << MyFileBuf.snextc();
sbumpc()
sbumpc() metodi joriy pozitsiyadagi belgining ASCII qiymatini qaytaradi va fayl ko‘rsatkichini bir belgi oldinga siljitadi.
cout << MyFileBuf.sbumpc();
sgetc()
sgetc() metodi fayl ko‘rsatkichini siljitmasdan joriy pozitsiyadagi belgining ASCII qiymatini qaytaradi.
cout << MyFileBuf.sgetc();
sgetn()
sgetn(destination, n) metodi fayldan n ta belgini o‘qiydi va ularni destination parametri ko‘rsatgan char massiviga yozadi. Bu metod o‘qilgan belgilar sonini qaytaradi.
char destination[20];
int amount = MyFileBuf.sgetn(destination, 19);
destination[amount] = '\0'; // Add a null terminating character to the string
cout << destination;
Faylga yozish funksiyalari
sputc()
sputc() metodi joriy pozitsiyaga belgi yozadi, so‘ngra fayl ko‘rsatkichini bir belgi oldinga siljitadi. Bu metod yozilgan belgining ASCII qiymatini qaytaradi.
cout << MyFileBuf.sputc();
sputn()
sputn(source, n) metodi source parametri ko‘rsatgan char massividan n ta belgini faylga yozadi. Fayl ko‘rsatkichi n ta belgi oldinga siljiydi. Bu metod faylga yozilgan belgilar sonini qaytaradi.
char source[] = "Hello World!";
int num = MyFileBuf.sputn(source, 12);
cout << num << " characters were written to the file";
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
