ofstream
C++ ofstream sinfi
Misol
Faylga yozish uchun ofstream sinfidan foydalaning:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// Create and open a text file
ofstream MyFile("filename.txt");
// Write to the file
MyFile << "Files can be tricky, but it is fun enough!";
// Close the file
MyFile.close();
}
Ta’rif va qo‘llanilishi
ofstream sinfi ("output file stream" — chiquvchi fayl oqimi so‘zlarining qisqartmasi) fayllarga yozish uchun ishlatiladi.
ofstream sinfi <fstream> sarlavha faylida aniqlangan.
Faylni ochish uchun fayl yo‘lini konstruktorga uzating:
ofstream MyFile("filename.txt");
Faylga yozish uchun << joylash operatori va turli funksiyalardan foydalanish mumkin.
Joylash (insertion) operatori
<< joylash operatori faylga literal qiymatni yoki o‘zgaruvchi tarkibini yozadi.
int year = 2024;
MyFile << year << "\n";
MyFile << "Files can be tricky, but it is fun enough!";
Manipulyatorlar
Manipulyatorlar faylga yoziladigan ma’lumotlarning formatini o‘zgartiradi. Ular << joylash operatori bilan literal qiymatlar va o‘zgaruvchilar kabi ishlatiladi.
setw() manipulyatoridan tashqari, manipulyatorning ta’siri uni boshqa manipulyator o‘zgartirmaguncha saqlanib qoladi.
Ba’zi foydali manipulyatorlar quyidagi jadvalda ko‘rsatilgan.
| Manipulyator | Tavsif | Misol |
|---|---|---|
boolalpha |
Boolean qiymatlarni "1" va "0" o‘rniga "true" va "false" ko‘rinishida yozadi. | MyFile << boolalpha << false; |
dec |
Butun sonlarni o‘nlik raqamlar bilan ifodalaydi. | MyFile << dec << 12; |
endl |
Yangi qator belgisini yozadi. Bu manipulyator chiqish buferini ham bo‘shatadi (flush), shu sababli u \n belgisini chop etishga qaraganda kamroq samarali. |
MyFile << "Line 1" << endl << "Line 2"; |
ends |
C uslubidagi stringlarni yakunlash uchun ishlatiladigan \0 null belgisini yozadi. |
MyFile << "Hello World!" << ends; |
fixed |
Suzuvchi nuqtali sonlarni kasr qismidagi raqamlar soni qat’iy belgilangan holda ifodalaydi. Kasr qismidagi raqamlar sonini setprecision() manipulyatori yordamida belgilash mumkin. |
MyFile << fixed << 19.99; |
hex |
Butun sonlarni o‘n oltilik raqamlar bilan ifodalaydi. | MyFile << hex << 12; |
internal |
Agar kenglik belgilangan bo‘lsa (setw() manipulyatori yordamida), sonlarning ishorasi chapga, qiymati esa o‘ngga tekislanadi, boshqa ma’lumot tiplarida esa natija o‘ngga tekislanadi. |
MyFile << setw(10) << internal << -12345; |
left |
Agar kenglik belgilangan bo‘lsa (setw() manipulyatori yordamida), natijani chapga tekislaydi. |
MyFile << setw(10) << left << "Hello"; |
noboolalpha |
boolalpha manipulyatori kiritgan o‘zgarishni bekor qilish uchun ishlatiladi. |
MyFile << noboolalpha << false; |
noshowbase |
showbase manipulyatori kiritgan o‘zgarishni bekor qilish uchun ishlatiladi. |
MyFile << hex << noshowbase << 12; |
noshowpoint |
showpoint manipulyatori kiritgan o‘zgarishni bekor qilish uchun ishlatiladi. |
MyFile << noshowpoint << 12345.0; |
noshowpos |
showpos manipulyatori kiritgan o‘zgarishni bekor qilish uchun ishlatiladi. |
MyFile << noshowpos << 12; |
nouppercase |
uppercase manipulyatori kiritgan o‘zgarishni bekor qilish uchun ishlatiladi. |
MyFile << hex << nouppercase << 12; |
oct |
Butun sonlarni sakkizlik raqamlar bilan ifodalaydi. | MyFile << oct << 12; |
right |
Agar kenglik belgilangan bo‘lsa (setw() manipulyatori yordamida), natijani o‘ngga tekislaydi. |
MyFile << setw(10) << right << "Hello"; |
scientific |
Suzuvchi nuqtali sonlarni ilmiy yozuvda ifodalaydi. Kasr qismidagi raqamlar sonini setprecision() manipulyatori yordamida belgilash mumkin. |
MyFile << fixed << 19.99; |
setfill() |
To‘ldiruvchi sifatida ishlatiladigan belgini tanlaydi. <iomanip> kutubxonasi kerak bo‘ladi. |
MyFile << setfill('.') << setw(10) << 19.99; |
setprecision() |
Suzuvchi nuqtali sonlarning aniqligini tanlaydi. Agar fixed yoki scientific manipulyatorlari ishlatilgan bo‘lsa, u kasr qismidagi raqamlar sonini, aks holda qiymatli raqamlar sonini belgilaydi. <iomanip> kutubxonasi kerak bo‘ladi. |
MyFile << setprecision(4) << 12.3456; |
setw() |
Keyingi chiqariladigan natijaning belgilarda o‘lchanadigan eng kam kengligini belgilaydi. Agar natija yetarlicha keng bo‘lmasa, qolgan joyni to‘ldirish uchun to‘ldiruvchi belgilar qo‘shiladi. <iomanip> kutubxonasi kerak bo‘ladi. |
MyFile << setw(10) << "Hello"; |
showbase |
Butun sonlarni o‘n oltilik yoki sakkizlik ko‘rinishda ifodalashda sanoq sistemasini ko‘rsatish uchun sonlar oldiga "0x" yoki "0" qo‘yadi. | MyFile << hex << showbase << 12; |
showpoint |
Suzuvchi nuqtali sonlarda o‘nlik nuqtani, hatto u kerak bo‘lmasa ham, har doim yozadi. | MyFile << showpoint << 12345.0; |
showpos |
Musbat sonlar yonida har doim + belgisini yozadi. | MyFile << showpos << 12; |
uppercase |
O‘n oltilik raqamlarni va ilmiy yozuvdagi "e" harfini katta harfda ifodalaydi. | MyFile << hex << uppercase << 12; |
Faylga yozish funksiyalari
Faylga yozish funksiyalari faylga ma’lumot yozadi va fayl ko‘rsatkichini yozilgan tarkibdan keyingi birinchi pozitsiyaga o‘tkazadi.
write()
write(str, n) metodi char tipidagi str massividan n ta belgini faylga yozadi.
char myStr[] = "Hello World!";
MyFile.write(myStr, 5);
put()
put(c) metodi ko‘rsatilgan c belgisini faylga yozadi.
char grade = 'B';
MyFile.put(grade);
Fayllar bilan ishlash funksiyalari
Fayllar bilan ishlash funksiyalari fayllarni ochadi, yopadi va ular ichida harakatlanish imkonini beradi.
open()
open(filepath) metodi filepath ko‘rsatgan yo‘ldagi faylni ochadi. Agar fayl allaqachon ochiq bo‘lsa, bu metod hech qanday ta’sir ko‘rsatmaydi.
ofstream MyFile;
MyFile.open("filename.txt");
is_open()
is_open() metodi fayl ochiq bo‘lsa true, hech qanday fayl ochiq bo‘lmasa false qaytaradi.
ofstream MyFile;
cout << MyFile.is_open(); << "\n"; // Displays 0 because the file is not open
MyFile.open("filename.txt");
cout << MyFile.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.
MyFile.close();
rdbuf()
rdbuf() metodi fayl bilan bevosita ishlaydigan ichki filebuf obyektiga ko‘rsatkich qaytaradi.
filebuf * buf = MyFile.rdbuf();
seekp()
seekp(position) metodi fayl ko‘rsatkichini fayl boshiga nisbatan belgilangan pozitsiyaga o‘tkazadi.
MyFile.seekp(6)
seekp(position, origin) metodi fayl ko‘rsatkichini fayldagi origin nuqtasiga nisbatan belgilangan position pozitsiyasiga o‘tkazadi. Boshlang‘ich nuqta (origin) uchta qiymatdan birini olishi mumkin:
ofstream::beg- Pozitsiya fayl boshiga nisbatan olinadi.ofstream::cur- Pozitsiya fayldagi joriy pozitsiyaga nisbatan olinadi.ofstream::end- Pozitsiya fayl oxiriga nisbatan olinadi.
Fayl ko‘rsatkichini turli pozitsiyalarga o‘tkazing:
MyFile.seekp(6, ofstream::beg);
cout << MyFile.tellp(); << "\n";
MyFile.seekp(-3, ofstream::cur);
cout << MyFile.tellp(); << "\n";
MyFile.seekp(-4, ofstream::end);
cout << MyFile.tellp(); << "\n";
tellp()
tellp() metodi fayl ko‘rsatkichining fayldagi joriy pozitsiyasini qaytaradi.
cout << MyFile.tellp();
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
