Дохилкуни аз файл ва хоричкуни ба файл

Печать

C++ хам дохилкуни аз файл ва хам хоричкуни ба файлро ба воситаи синфхои (classes) зерин таъмин мекунад:

  • ofstream. Синф барои сабти маълумот ба файл (дар асоси ostream сохта шудааст);

  • ifstream. Синф барои хондани маълумот аз файл (дар асоси istream сохта шудааст);

  • fstream. Синф барои амалхои хам хондан ва хам сабти маълумот (дар асоси iostream сохта шудааст).

Файлро дар холати ичро шудани дохилкуни мо хамчун манбаъ тасаввур карда метавонем; манбае, ки аз он маълумоти ба мо даркори чори аст. Файлро дар холати ичро шудани хоричкуни мо хамчун анбор тасаввур карда метавонем; анборе, ки ба он маълумоти ба мо даркори чори мешавад.

Рафти кор бо файл аз якчанд даврхо иборат аст.

Кушодани файл. Якумин амале, ки аз болои объектхо(намояндагон, нусхахо)-и ин синфхо ичро карда мешавад, ин мантикан пайваст кардани ягон объект бо ягон файли вокеи мебошад, ки ин амалро кушодани файл меноманд. Яъне файли кушодашуда дар барнома бо ягон объект ифода карда мешавад, албатта бо кумаки яке аз синфхои болои. Харгуна амали хоричкуни ва ё дохилкуние, ки аз болои ин объект ичро карда мешавад ба файли вокеи низ татбик карда мешавад.

Барои кушодани файл аз функсия-аъзои синфхои болои функсияи open() истифода мебаранд:

void open(const char *filename, openmode); 

Дар ин чо void нишони он аст, ки функсияи open ягон кимат боз намегардонад, filename - сатрест, ки дар он номи файл нишон дода мешавад, openmode - усули кушодани файл. openmode комбинатсияи киматхои зерин буда метавонад:

ios::in Кушодани файл барои хондан
ios::out Кушодани файл барои сабт кардан
ios::ate Кор бо файл аз охири он огоз меёбад
ios::app Хар як хоричкуни ба охири файл зам мешавад
ios::trunc Агар файл мавчуд бошад, он тоза карда мешавад
ios::binary Речаи бинари
ios::nocreate Файл кушода намешавад, агар он мавчуд набошад
ios::noreplace Файл кушода намешавад, агар он мавчуд бошад

Комбинатсияхои ин киматхо бо ёрии оператори битии OR ( | ) сохта мешаванд. Масалан, барои дар режими бинари кушодани файли namuna.bin барои ба давоми он зам кардани маълумот, мо аз функсия-аъзои open() истифода мебарем:

ofstream file1; file1.open("namuna.bin", ios::out | ios::app | ios::binary); 

Функсия-аъзои open() дар хар се класс ofstream, ifstream, fstream мавчуд аст ва усули кушодани файлхо аз руи хомуши (default mode) дар хар се класс гуногун аст:

СинфУсули кушодан аз руи хомуши
ofstream ios::out | ios::trunc
ifstream ios::in
fstream ios::in | ios::out

Усули кушодан аз руи хомуши факат дар холати дар истифодаи функсияи open набудани аргументи дуюм - openmode татбик карда мешавад. Агар функсияи open хамчун аргументи дуюм ягон кимате дошта бошад, усули кушодан аз руи хомуши инкор карда мешавад, бо он комбинатсия сохта намешавад.

Азбаски якумин амале, ки аз болои объектхои синфхои ofstream, ifstream, fstream ичро карда мешавад ин, одатан, кушодани файл мебошад, хар се синф дар сохти худ конструктор доранд, ки дар он функсияи open() истифода мешавад. Хамин тарик, мо метавонем амали кушодани файлро, ки дар боло ичро шуда буд, ин тавр ичро кунем:

ofstream file1("namuna.bin", ios::out | ios::app | ios::binary); 

Хар ду тарзи кушодани файл дурустанд.

Шумо метавонед бо ёрии функсия-аъзо is_open() санчед, ки файл дуруст кушода шудааст ё не. Дар холати дар хакикат пайваст шудани объект бо файл ин функсия TRUE бозмегардонад, дар холати баръакс FALSE бозмегардонад.

Пушидани файл. Баъди он ки кор бо файл ба охир расид, онро пушидан зарур аст, то ки он боз дастрас гардад. Барои пушидани файл функсия-аъзо close() истифода бурда мешавад. Ин функсия буферро тоза мекунад ва алокаи байни объект ва файлро канда мекунад. Сохтори он содда аст:

void close(); 

Яъне дар намунаи болои барои пушидани файл чунин навиштан зарур аст:

file1.close(); 

Агар ин функсия истифода шуда бошад, объект file1 барои кушодани дигар файл истифода шуда метавонад. Ва файл namuna.bin аз тарафи просессхои дигар боз кушода шуда метавонад.

Дар холати кушода натавонистани файл, деструктори синфхо автоматики функсияи close()-ро чег мезананд.

Кор бо файл хамчун манбаи матн. Синфхои ofstream, ifstream, fstream дар асоси синфхои ostream, istream, iostream сохта шудаанд. Яъне объектхои синфи fstream метавонанд объектхои синфхои модариашро истифода баранд. Умуман, дар вакти кор бо файлхои матни мо хамон аъзохои ин синфхоро, ки хангоми кор бо консол (клавиатура - cin ва экрани дисплей - cout) ба мо зарур буданд боз истифода мебарем. Ба монанди мисоли пойни, ки дар он оператори замима << истифода шудааст.

Мисоли сабт ба файли матни:

//namuna28.cpp
using namespace std;
#include <fstream>
int main() {
ofstream file1("namuna.txt");
if(file1.is_open()) {
file1<<"In satri yakum."<<endl;
file1<<"In satri duyum."<<endl;
}
file1.close();
return 0;
}

Баъди ичрои ин барнома дар каталоги чори файли матнии namuna.txt пайдо мешавад, ки онро ёфта бо ягон тахриргари матни тамошо кунед. Ва ё аз барномаи зерин истифода кунед:

//namuna29.cpp
using namespace std;
#include <fstream>
#include <iostream>
int main() {
char buffer[256];
ifstream file2("namuna.txt");
if(!file2.is_open()) {
cout<<"Khatogi bo khushodani file!"<<endl;
return 0;
}
while(!file2.eof()) {
file2.getline(buffer,80);
cout<<buffer<<endl;
}
file2.close();
return 0;
}

Хангоми кушодани файл namuna.txt ягон душвори ба амал ояд, дар экран маълумот дар бораи хатоги пайдо мешавад ва барнома кори худро катъ мекунад. Барнома пайдарпай сатрхоро аз файли матни хонда, онхоро ба экран чоп мекунад. Функсияи eof() дар холати ба охири файл расидан TRUE бозмегардонад.

Функсияхои санчиши. Функсияи bad() бозмегардонад TRUE хангоми рух додани хатоги дар вакти хондан ё сабт кардан. Масалан, хангоми кушиши сабт ба файле, ки барои сабт кушода нашудааст ё диске, ки ба он шумо сабт карданиед дигар чои холи надорад.

Функсияи fail() дар хамаи холатхое, ки функсияи bad() TRUE бозмегардонад ва илова бар ин дар холати рух додани хатогихои шакли (format error) низ TRUE бозмегардонад. Масалан, хангоми кушиши хондани адади бутун ягон рамз хонда шудааст.

Функсияи eof() дар холати ба охири файл расидан TRUE бозмегардонад.

Функсияи good() дар хамаи холатхое, ки функсияхои болои TRUE бозмегардонанд, FALSE бозмегардонад.

Функсияи clear() барои тоза кардани натичахои санчиш истифода мешавад.

САВОЛХО БАРОИ МУСТАХКАМКУНИ
1. Дар С++ кор бо файл чи хел ичро карда мешавад?
2. Кадом речахои кушодани файл мавчуданд?
3. Барои пушидани файл кадом кадом функсия кор фармуда мешавад?
4. Максад аз истифодаи функсияхои санчиши дар чист?

Добавить комментарий


Защитный код
Обновить

Copyright © 2004 - 2012 Oftob.com
Professional Joomla Templates - 888 Poker Review
Mail.Ru