Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Muasir proq dil C++.doc
Скачиваний:
15
Добавлен:
01.05.2025
Размер:
7 Мб
Скачать
☆

9.4.2. Oxumaq üçün faylın açılması

Əvvəlki bənddə yazmaq üçün faylın açılması haqqında bütün deyilənlər oxumaq üçün faylın açılması üçün də doğrudur. Əsas fərq ondan ibarətdir ki, open funksiyasını və ya onun konstruktorunu çağıran obyekt fstream obyektindən asılı olmayaraq istifadə olunur. Buna görə də açılan fayl artıq mövcud olmalıdır. Faylın yazmaq üçün açılmasından fərqli olaraq, oxumaq üçün faylı açmaq cəhdi, fayl olmadıqda onu yaratmayacaq.

Aşağıdakı operatorlarda oxumaq üçün faylın açılmasında ifstream obyektinin open funksiya –həddi istifadə olunub:

ifstream infile;

infile. open(“telebe . dat”);

Bu məqsədə fstream obyekti ilə də çatmaq olar:

fstream afile;

afile . open(“telebe.dat”,ios::in);

Aşağıdakı operatorda oxumaq üçün faylın açılmasında ifstream konstruktoru istifadə olunur:

ifstream infile (“telebe . dat”)

bunu aşağıdakı kimi də etmək olar:

fstream afile(“telebe . dat”, ios::in);

9.4.3. Faylın oxumaq və yazmaq üçün açılması

Bu məqsədlə fstream obyektindən istifadə etmək olar, if­stre­am və ya ofstream obyektlərindən isə istifadə etmək ol­maz, çünki, ofstream obyekti faylın oxunması, ifstream ob­yek­ti isə fayla yazmaq üçün tətbiq oluna bilməz.

Aşağıdakı kod fraqmentində bu məqsədlə fstream ob­yekti­nin open funksiya – həddi istifadə olunmuşdur:

fstream afile;

afile . open (“telebe . dat”, ios::in)|ios::out);

hər iki halda bit üzrə operator və ya (|) istifadə olunmuşdur.

Qeyd edək ki, ios::in və ios::out flaqlarının birgə istifadəsi sus­maya görə qiyməti dəyişir. ios::out flaqı öz – özlüyündə möv­cud faylı yenidən yazır, ios::in flaqı isə gözləyir kı, fayl artıq möv­cuddur. Lakin bu flaqlar birgə istifadə olunduqda faylın məz­munu saxlanılır və əgər fayl mövcud deyilsə, onda o, yara­dı­lır.

Lakin open funksiya – həddi və ya konstruktorun olması hə­lə fay­lın müvəffəqiyyətlə açılması demək deyildir. Bunun bir ne­çə səbəbi var. Faylın oxumaq və yazmaq üçün açılması ara­­sın­da əsas fərq ondan ibarətdir ki, hələlik mövcud olmayan fay­lı yaz­maq istəyirik - əməliyyat sistemi avtomatik olaraq fayl ya­ra­dacaq, lakin mövcud olmayan fayldan oxumaq müm­kün ol­ma­yacaq. Ona görə də fayldan oxumazdan əvvəl onun açıl­­ma­sı­na tam əmin olmaq lazımdır.

Əgər fayl oxumaq üçün açıla bilmirsə, onda open funk­si­ya­sını ça­ğıran ifstream obyektinin qiyməti NULL (qiyməti sıf­ra bə­ra­bər olan sabitdir) olur. Digər üsul isə ondan ibarətdir ki, əgər fayl oxumaq üçün açıla bilmirsə, funksiya – həddi doğ­ru qiy­mət­ qaytarır. Bu isə o deməkdir ki, faylı açmaq müm­kün ol­ma­dı.

Aşağıdakı proqramda faylın açılmasının hər iki üsulunun isti­fa­də­si şərh olunur:

#include <fstream>

#include <iostream>

using namespase std;

int main ( )

{

ifstream infile;

infile . open (“telebe . dat”);

cout << “(infile) =” <<infile <<endl;

cout << “(infile . fail()) =”<< infile . fail() <<endl;

return 0;

}

Əgər telebe . dat faylı mövcud deyilsə, çıxış belə olur:

(infile)=00000000

(infile . fail( ))=1

Lakin əgər telebe.dat faylı proqram olan kataloqda yer­lə­şirsə, onda çıxış belə olar:

(infile) = 0012FE40

(infile. fail( ))= 0

Qeyd edək ki, 0012FE40 qiyməti – infile dəyişəninin ifstream ünvanıdır və söz yox ki, proqramda başqa cür də ola bilər.

ifstream obyektindən fərqli olaraq, mövcud olmayan faylı aç­maq istəyən ofstream obyekti NULL-a bərabər deyil və onun fail funksiya həddi yalan qiymət qaytarır. Ona görə də əmə­liy­yat sistemi hələlik mövcud olmayan faylı açacaq. Buna bax­ma­ya­raq, yazmaq üçün faylın açılması həmişə uğurlu ol­mur. Mə­sə­lən, aşağıdakı proqramı buraxmazdan əvvəl, proqram yer­lə­şən kataloqda telebe.dat faylı yaratmaq və onun xassələri da­xi­lin­də “yalnız oxumaq üçün” qiymətini qurmaq lazımdır:

#include <fstream>

#include <iostream>

using namespase std;

int main ( )

{

ofstream outfile;

outfile . open (“telebe . dat”);

cout << “(outfile) =” <<outfile <<endl;

cout << “(outfile . fail()) =”<< outfile . fail() <<endl;

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]