You are on page 1of 13

Основи на програмирање (ОП - 02)

11. ДАТОТЕКИ
Датотеки се множества податоци зачувани на некоја надворешна меморија
под едно заедничко име. Тие можат да содржат различни податоци: броеви, текст,
слики, звук итн.
Датотеките може да бидат:


влезни датотеки – оние од кои може само да се чита,


излезни датотеки – оние во кои може само да се запишува и
влезно-излезни датотеки – оние во кои може да се чита и во кои може да се
запишува.

Читање податоци од датотека и запишување податоци во датотека се врши на ист


принцип како и читање и запишување податоци преку терминал (тастатура и
екран), т.е. оперативниот систем ги третира тастатурата и екранот како посебни
(стандардни) датотеки за влез и излез. Преносот на податоците од датотеките во
меморијата и обратно е наречен датотечен поток.
Датотеките сместени на надворешните мемории се нарекуваат физички датотеки.

1
Основи на програмирање (ОП - 02)

Во оперативните системи овие датотеки имаат име и тип, па затоа се запишуваат


во форма име_на _датотека.тип.
За обработка на податоците кои се чуваат во физичките датотеки (во меморијата),
потребни се соодветни програми (апликации) со чии функции и инструкции се
внесуваат податоците од датотеките во меморијата, се врши нивна обработка и
добиените резултати (податоци) се запишуваат во физички датотеки.
Функциите за операции со податоци во С++ се сместени во посебни библиотеки:
fstream, ifstream, ofstream. Истите се вклучуваат во програмите со директивата:
#include
Пример:
#include <fstream>

2
Основи на програмирање (ОП - 02)

Влезни датотеки
Типот на променливите за влезните датотеки е ifstream.
Декларација на променлива за влезна датотека:
ifstream име_на _променлива;
Пример:
ifstream datvlezna;
ifstream vlezna, indat;
За да може да се читаат податоци од една влезна (физичка) датотека, мора да ì се
придружи променлива од тип ifstream:
име_на_променлива.open(име_на_датотека);
каде што
име_на_променлива – име на променливата за влезна датотека,
име_на_датотека – име на физичката датотека и
open – функција за отворање на датотека од библиотеката <fstream>.
Пример:


3
Основи на програмирање (ОП - 02)

datvlezna.open(“podatoci”);
Поврзување на променливата за влезна датотека со физичката датотека може да се
направи и при нејзиното декларирање:
ifstream datvlezna(“podatoci”);
Проверка дали постои датотека за читање со такво име:
if (!datvlezna)
{
cout<<”Datoteka so takvo ime NE postoi! \n”;
return 1
}

Излезни датотеки
4
Основи на програмирање (ОП - 02)

Типот на променливите за излезните датотеки е ofstream.


Декларација на променлива за излезна датотека:
ofstream име_на _променлива;
Пример:
ofstream datizlez;
ofstream izlezna, output;
За да може да се запишат податоци во една излезна (физичка) датотека, мора да ì
се придружи променлива од тип оfstream:
име_на_променлива.open(име_на_датотека);
каде што
име_на_променлива – име на променливата за влезна датотека,
име_на_датотека – име на физичката датотека и
open – функција за отворање на датотека од библиотеката <fstream>.
Пример:


datizlez.open(“rezultati”);
5
Основи на програмирање (ОП - 02)

izlezna.open(“izlezna_datoteka”);
outdat.open(pomosna_datoteka)
Поврзување на променливата за излезна датотека со физичката датотека може да
се направи и при нејзиното декларирање:
оfstream datizlezna(“rezultati”);
Проверка дали постои некоја датотека со име што сакаме да го доделиме:
if (datizlezna)
{
cout<<”Datotekata so takvo ime veke postoi! \n”;
return 1
}

Влезно−излезни датотеки

6
Основи на програмирање (ОП - 02)

За да може да се чита од некоја датотека и, истотака, да се запишува во неа, треба


да се декларира променлива за влезно−излезна датотека од тип fstream.
Декларација на променлива за влезно−излезна датотека:
fstream име_на _променлива;
Пример:
fstream dat, datoteka;
fstream in_out;
Поврзување на променливата за влезно−излезна датотека со физичката датотека се
врши на ист начин како кај влезните и излезните датотоеки, но притоа, мора да се
нагласи за што се отвора датотеката: за читање, за запишување или за додавање на
податоци во неа. Тоа се постигнува со посебен параметар
име_на_променлива.open(име_на_датотека, параметар);
Во следнава табела се прикажани вредностите на параметар со кои се контролира
начинот на работа со дадена датотека:
7
Основи на програмирање (ОП - 02)

параметар
ios::in
ios::out
ios::app
ios::ate
ios::nocreate
ios::noreplace
ios::notrunc
ios::binary

начин на отворање на датотеката


влезна датотека
излезна датотека
излезна датотека за допишување на крајот
отвора постоечка датотека и го бара крајот на датотеката
отвора датотека само ако таа постои
отвора датотека само ако таа не постои
отвора постоечка датотека и ја брише старата содржина
отвора датотека во бинарен мод (ако не е назначено датотеката се
отвора во текстуален мод).

Пример:
1. Отворање влезна датотека за читање: dat1.open(“prva”, ios::in);
2. Отворање излезна датотека:
dat1.open(“prva”, ios_base::out);
3. Отворање датотека за допишување податоци во неа:
dat1.open(“prva”, ios_base::app);

Читање од датотека и запишување во датотека


Читање од датотека:
8
Основи на програмирање (ОП - 02)

ifstream dat;
int a;
char tekst[20];
dat.open(vlezna);
dat>>a>>tekst;
Запишување во датотека:
ifstream dat;
int a;
char tekst[20];
dat.open(vlezna);
dat<<a<<tekst;

Затворање на датотека
Датотека се затвора со функцијата close().
Пример:
9
Основи на програмирање (ОП - 02)

dat.close();
За да се користи веќе затворена датотека таа треба повторно да се отвори.

Поважни функции за работа со датотеки


seekg()
seekp()
eof()
clear()
getline()

− функција за движење низ влезна датотека,


− функција за движење низ излезна датотека,
− логичка функција за испитување дали е крај на датотеката,
− ресетирање на датотеката за читање од почеток,
− функција за читање цела линија од датотека.

Пример. Да се креира излезна датотека и да се запишат податоци во неа. Потоа,


датотеката да се затвори и да се отвои како влезна датотека, од која ќе се читаат
податоците и ќе се прикажат на екранот.
#include <iostream>
#include <fstream>
using namespace std;
main()
{
оfstream datizlez(“test”);
10
Основи на програмирање (ОП - 02)

if (!datizlez)
{
cout<<”Datoteka so takvo ime Ne postoi. \n ”; return 1;
}
datizlez<<”Zdravo! \n”;
datizlez.close();
ifstream datvlez(“test”);
if (!datvlez)
{
cout<<”Datoteka so takvo ime Ne postoi. \n ”; return 1;
}
char str[10];
datvlez>>str;
cout<<str<<endl;
datvlez.close();
return 0;
}

Пример. Претходниот пример да се реши со користење на иста променлива за


влезна и излезна датотека.
#include <iostream>
#include <fstream>
using namespace std;
main()
11
Основи на програмирање (ОП - 02)

{
fstream dat(“test”, ios::out);
if (!dat) {
cout<<”Datoteka so takvo ime Ne postoi. \n ”; return 1;
}
dat<<”Zdravo! \n”;
dat.close();
dat.open(“test”, ios::in);
if (!dat) {
cout<<”Datoteka so takvo ime Ne postoi. \n ”; return 1;
}
char str[10];
dat>>str;
cout<<str<<endl;
datvlez.close();
return 0;
}

12

You might also like