ofstream

C++ ofstream sinfi

❮ fstream sinflari


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();

❮ fstream sinflari

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!