getline(input, state, '#') charilishi (23-qator) orqali, shtat massiviga belgilar # belgisiga yoki fayl so`ngiga kelgunicha o`qiladi.
Ko`p qo`llaniluvchi, qolgan ikkita funksiyalar – get va put. Kiritish ob’yektida bitta belgini o`qish uchun get funksiyasini, bitta belgini yozish uchun esa, put funksiyasini chaqirishimiz mumkin.
get funksiyasining ikki xil versiyasi mavjud:
char get() // Belgi qaytarish ifstream* get(char& ch) // Belgini ch ga o`qish Birinchi versiya kiritish ob’yektidan belgini qaytaradi. Ikkinchi versiyasi belgili argumentning havolasini yuboradi, belgini kiritish ob’yektidan o`qiydi va uni ch ga yozadi. Shuningdek bu funksiya, kiritish (input) ob’yekti ishlatganda, unga havolani yuboradi.
Faylga belgilarni yozish uchun qaysi funksiyadan foydalaniladi? Misollar bilan tushuntiring.
Kiritish ob’yektida bitta belgini o`qish uchun get funksiyasini, bitta belgini yozish uchun esa, put funksiyasini chaqirishimiz mumkin.
get funksiyasining ikki xil versiyasi mavjud:
char get() // Belgi qaytarish ifstream* get(char& ch) // Belgini ch ga o`qish Birinchi versiya kiritish ob’yektidan belgini qaytaradi. Ikkinchi versiyasi belgili argumentning havolasini yuboradi, belgini kiritish ob’yektidan o`qiydi va uni ch ga yozadi. Shuningdek bu funksiya, kiritish (input) ob’yekti ishlatganda, unga havolani yuboradi.
put funksiyasining sarlavha qismi quyidagicha:
void put(charch)
U ma’lum bir belgini chiqarish (output) ob’yektiga yozadi.
8.7-kodli ro`yxatda bu ikki funksiyadan foydalanishga doir misol berilgan. Dastur foydalanuvchidan faylni kiritishni so`raydi va uni yangi faylga nusxalaydi.
8.7-kodli ro`yxat. CopyFile.cpp 1 #include 2 #include 3 #include 4 using namespace std;
5
6 int main()
7 {
8 // Manbaa faylni kiritish 9 cout << " Manbaa fayl nomini kiriting: ";
10 string kirishFaylNomi;
11 cin >> kirishFaylNomi;
12
13 // Ko`zlangan faylni kiritish 14 cout << "Ko`zlangan fayl nomini kiriting: ";
15 string chiqishFaylNomi;
16 cin >> chiqishFaylNomi;
17
18 // Kirish va chiqish oqimlarini hosil qilish 19 ifstream input(kirishFaylNomi.c_str());
20 ofstream output(chiqishFaylNomi.c_str());
21
22 if(input.fail())
23 {
24 cout << kirishFaylNomi << " mavjud emas!"<< endl;
25 cout << "Dasturdan chiqish..."<< endl;
26 return 0;
27 }
28
29 char ch = input.get();
30 while(!input.eof()) // Agar fayl so`ngi bo`lmasa davom etish 31 {
32 output.put(ch);
33 ch = input.get(); // Keyingi belgini o`qish 34 }
35
36 input.close();
37 output.close();
38
39 cout << "\nNusxalandi!"<< endl;
40
41 return 0;
42 }
Natija:
Manbaa fayl nomini kiriting: c:\example\CopyFile.cpp
Ko`zlangan fayl nomini kiriting: c:\example\temp.txt
Nusxalandi!
Dastur foydalanuvchini mavjud manbaa fayl nomini (11qator) va ko`zlangan fayl nomini (16-qator) kiritishga undaydi. 19-qatorda kirishFaylNomi uchun kiritish ob’yekti – input yaratiladi va 20-qatorda chiqishFaylNomi uchun chiqarish ob’yekti – output hosil qilinadi. Fayl nomlari C-satrlar bo`lishi lozim. kirishFaylNomi.c_str() kirishFaylNomi dan C-satr qaytaradi.
22-27-qatorlar kiritish fayli mavjudligi yoki yo`qligini tekshiradi. 30-34-satrlar get funksiyasidan foydalangan paytda qaytadan belgilarni o`qiydi va put funksiyasidan foydalanib, belgilarni chiquvchi faylga yozadi.
Faraz qilaylik, 29-34-qatorlar quyidagi kod bilan almashtirilgan:
while(!input.eof()) // Agar fayl so`ngi bo`lmasa davom etish {
output.put(input.get());
}
Fayllarni yaratish rejimlari(mode) haqida ma’lumotlar keltiring.
Alternativ ravishda, kirish yoki chiqish oqimini hosil qilishda fstream sinfidan foydalanishimiz mumkin. Agar dasturimizda kirish va chiqish oqimlarining har ikkalasi uchun ham bitta oqim ob’yekti hosil qilish talab etilsa, bu talabga fstream sinfi mos tushadi. fstream faylni ochishda, C++ ga fayldan qanday foydalanishni aytib beruvchi faylni ochish shakli ni belgilab olishimiz zarur bo`ladi. 8.1-jadvalda turli xildagi fayl ko`rinishlarining ro`yxati keltirilgan.
1-jadval. Fayl ko`rinishlari