You are on page 1of 36

C++ advanced

5.Работа со Датотеки

Д-р. Рамона Маркоска, вонр.проф.

www.ramona-markoska.info
Дополнителни материјали и ресурси

—  http://compsci.hunter.cuny.edu/~sweiss/resources/
fileIO.pdf

—  http://www.cplusplus.com/reference/cstdio/FILE/

—  http://mendo.mk/Lecture.do?id=17
Работа со Датотеки-основни поими
—  Дефиниција- множество на различни податоци
сочувани и запамтени под заедничко име.
Датотеките имаат име, специфицирана локација
каде се сместени и сочувани, врз нив може да се
применуваат сите операции (измена,
преместување, преименување, други видови на
манипулација)
—  Класификација- влезни, излезни и влезно-
излезни датотеки
—  Податочен (про)ток- физички и логички
датотеки, трансфер и обработка на датотечки
податоци, функции за манипулација со
датотеки
Податочен (про)ток- илустрација- физички и логички
датотеки, трансфер и обработка на датотечки податоци,
функции за манипулација со датотеки
Библиотеки за работа со фајлови
http://www.cplusplus.com/doc/tutorial/files/
fstream библиотека и ф-ции за работа со
датотеки во С++ -1
Синтакса Значење и дејство
—  Декларирање на променлива dat за влезна
ifstream vlez;
датотека

dat1.open(“dat2”) Отварање на физичка датотека dat2 и нејзино


поврзувње со дат1. (и за влезни и за излезни
датотеки- !воочи разлика)

ofstrem izlez; Декларирање на променлиза за излезна датотека

fstream vlezizlez; Декларирање на датотека со која по потреба ќе


може да се работат влезно-излезни операции

datoteka.close(); Задолжително, независно од видот на датотека и


активноста, се практикува затворање на стримот.
fstream библиотека и ф-ции за работа со
датотеки во С++ -2
Синтакса Значење и дејство
— 
seekg(); Движење низ влезна датотека

seekp() Движење низ излезна датотек

clear(); Декларирање на променлиза за излезна датотека

eof(); Проверка дали е крај на датотекатс

getline(); Читање на цела линија или на датотека до некој


знак или крај.
sync(); Синхронизација на влезен бафер со соурс на
карактери (извор).
get(); Земање на неформатирани податоци од стрим

read(); Читање на блок од податоци


Поврзување на променливи со физички
датотеки-1
—  Поврзување на променливи за влезни датотеки со физички
датотеки: ( Podatoci- пример е име на физичката датотека )

-  при декларирање
ifstream datVlez(“Podatoci ”)

-задавање на име на физичката датотека преку терминал

ifstream vlez;
char ImeNaVlezna[10];
Cout<<“Vnesi ime na datoteka”;
Cin>>ImeNaVlezna; // se vnesuva Podatoci
Vlez.open(ImeNaVlezna);
Поврзување на променливи со физички
датотеки-1
—  Поврзување на променливи за влезни датотеки со
физички датотеки: ( Podatoci- пример е име на
физичката датотека )
—  Пред да се отвори за читање, треба да се провери
дали воопшто постои

if (!vlez)
{ cout<<“Greshka, ne postoi, ili ne mozhe da
se otvori \n”
return …
}
Поврзување на променливи со физички
датотеки-2
—  Поврзување на променливи за излезни датотеки со
физички датотеки
-  при декларирање
ofstream datIzlez(“Rezultati ”)

-задавање на име на физичката датотека преку терминал

ofstream izlez;
char ImeNaIzlezna[10];
Cout<<“Vnesi ime na datoteka”;
Cin>>ImeNaIzlezna; // se vnesuva Podatoci
izlez.open(ImeNaIzlezna);
Поврзување на променливи со физички
датотеки-2
Дополнување за поврзување на променливи за излезни датотеки
со физички датотеки, преку терминал:
—  Ако не постои датотека со тоа име, таа со оваа синтакса се
креира
—  Ако постои, при секое ново снимање старата содржина се
заменува со нова
—  Ако се даде ново име (слично како во други апликации)
ажурираната содржина ќе се сочува во датотека со новото име
( сл. од пример 2, пример 3)

ofstream izlez;
char ImeNaIzlezna[10];
Cout<<“Vnesi ime na datoteka”;
Cin>>ImeNaIzlezna; // se vnesuva Podatoci
izlez.open(ImeNaIzlezna);
Пример 1. Демонстрација и подсетување на некои основни
операции при работа со датотеки-1
#include <fstream>
int main()
{
/* definiranje na nizi za ime na datoteka-fajl i
nejzini sodrzini- stringovi od karakteri*/
char ImeNaFajl[80];
char Sodrzina1[255];
char Sodrzina2[255];
char SodrzinaNaTxt; // niza na fajlot .txt
cout<<"Vnesete ime na fajlot po izbor i zavrshete
so .txt : ";
cin >> ImeNaFajl;
ofstream fout(ImeNaFajl); // kreiranje i otvoranje
datoteka na mestoto na izvrshniot fajl
cout << "Vnesi nekoja sodrzina: ";
cin.ignore(1,'\n'); // ignorirana, preskoknata linija
Пример 1. Демонстрација и подсетување на некои основни
операции при работа со датотеки -2
ofstream fout(ImeNaFajl);
// kreiranje i otvoranje izlezna datoteka

cout << "Vnesi nekoja sodrzina: ";

cin.getline(Sodrzina1,255);
// vcituvanje na sodrzinata preku tastatura

fout << Sodrzina1 << "\n";


// zapishuvanje vo datotekata
cout << "Povtorno vnesete sodrzina po izbor: ";
cin.getline(Sodrzina2,255);
fout << Sodrzina2 << "\n";
fout.close(); // zatvoranje na datotekata
Пример 1. Демонстрација и подсетување на некои основни
операции при работа со датотеки -3
ifstream fin(ImeNaFajl);
// otvoranje na vlezna datotekata pred chitanje
cout << "Ova e sodrzinata na datotekata koja ja vnesovte \n";
while (fin.get(SodrzinaNaTxt))
//zemanje i ..
cout << SodrzinaNaTxt;
// .. pecatenje na konzola
cout << "\n Kraj na datotekata.\n";
fin.close();
//zatvoranje na vlezna datoteka
 
system("pause");
return 0;
Поврзување на променливи со физички датотеки-3

—  Поврзување на променливи за влезно-излезни


датотеки со физички датотеки
—  Најчесто и најпрактично е да се работи со вакви
датотеки
—  Специфики ! – при назначување на променливите и
при отварање на датотеката, мора да се нагласи за
што, .т.е. со која цел се отвара датотеката- дали за
читање или пишување, или додавање на податоци.
—  Параметар за контрола на отварањето на датотека
во зависност од планирана активност
Поврзување на променливи за I/O датотеки со
физички датотеки-3
promenliva.open(datoteka, parametar);
параметар отворање на датотека ..

ios::in ..влезна
ios::out .. излезна
ios::app .. излезна за допишување на крајот
ios::ate ..која постои и го бара крајот
ios::nocreate .. само доколку таа постои
ios::noreplace ..само доколку не постои (без препишување)
ios::trunc .. постоечка и ја бриши нејзината содржинс
ios::binary .. во бинарен облик
Меѓумеморија и ф-ја flush
—  Со цел поефикасно користење на дисковите, податоците кои
се вметнуваат во одреден податочен поток може да се
сместат во меѓумеморија - да се групираат и чуваат во
меморија пред да се запишат на диск. На пример, доколку во
една датотека набрзина запишеме десет цели броеви, можно
е системот да одлучи дека е поефикасно да почека додека ги
дознае сите десет броеви (нив да ги смести во
меѓумеморија), а потоа, набрзина, да ги запише овие
податоци на диск.
—  Самата програма е задолжена да одлучи кога и како ќе ја
испразни меѓумеморијата и ќе ги запише податоците на
диск. Доколку овој факт не ви се допаѓа или се наоѓате во
ситуација во која е потребно запишување на одредена група
на податоци веднаш, може да го повикате методот flush().
Овој метод служи за празнење на меѓумеморијата и тој
гарантира дека сите податоци кои дотогаш биле вметнати во
соодветниот податочен поток ќе бидат запишани на диск.
Превемено за едукативни цели од mendo.mk
Пример 2. Операции со датотеки, функции, покажувачи

Да се формира текстуална датотека во Notepad, на локација
E:\pismo.txt.Да се напишe функција за испис на датотеката
на стандарден излез со задржување на структурата по
редови, и таа да се повика во програмата. ( Да се работи со
покажувач на датотеката во главната програма)
Пример 2. Операции со датотеки, функции, покажувачи
// F-ja za ispis na datotekata na standarden izlez
so zachuvuvanje na struktura na red
void ispis(FILE *datoteka)
{
char znak;
printf("\nSodrzinata na datotekata e: \n\n");
while(fscanf(datoteka,"%c", &znak)!=EOF)
{
printf("%c", znak);
}
printf("\n");
}

Пример 2. Операции со датотеки, функции, покажувачи

main()

{
// Definiranje na pokazhuvac na datoteka
FILE *datoteka;
// Otvaranje na datotekata za chitanje
datoteka=fopen("E:\\pismo.txt","r");
 
ispis(datoteka);
fclose(datoteka);
 
system("PAUSE");
return EXIT_SUCCESS;
}
 
Пример 2. Практични ефекти- демонстрација

 
Пример 3. Влезно излезна датотека, стринг, како влезен
стрим
#include <iostream>
#include <fstream>
// Vklucuvanje na biblioteka za rabota so datoteki
using namespace std;
int main(int argc, char *argv[])
{
ofstream outFile;
//Kreiranje izlezen strim
outFile.open("File.txt");
//Otvaranje na fajl vo koj kje se pishuva
outFile<<"Zdravo studenti";
//Zapis na sodrzina vo fajlot
outFile.close();
//Zatvoranje na fajlot
Пример 3. Влезно излезна датотека, стринг, како влезен
стрим

 
Пример 3. Влезно излезна датотека, стринг, како влезен
стрим

 
Пример 3. Влезно излезна датотека, стринг, како влезен
стрим

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

 
Пример 4. Влезен стрим и датотека поврзување со физичка,
креирана во друга апликација

Препорака: Датотеката да се сочувува во фолдерот


во кој се планира да биде извршниот фајл од С++.
Што би требало да се направи во спротивно ?
.. дел од кодот ..
ifstream Vlez;
string s;
Vlez.open("Zadacha-7-10.txt");
while(getline(Vlez,s))
cout<<s<<endl;
Vlez.close();
Пример 4. Влезен стрим и датотека поврзување со физичка,
креирана во друга апликација
1. Справување со грешки - cerr, ==false

превземено за едукативни цели од mendo.mk


2. Справување со грешки – cerr, .fail()

Коментар за грешка во отворањето на


фајлот кој се печати на конзола. Исто така,
потсетување, дека е применет
нестандарден излез, за такви соодветни
ситуации.
3. Справување со грешки

превземено за едукативни цели од mendo.mk


Запис на структура во датотека преку покажувач
Запис на структура во датотека преку покажувач
Придружување на покажувач кон датотека

стандардни стримови или т.н. потоци при


комуникација со извршната околина, во
завосност од содржина, намена и карактер се во
трите појавни I/O форми: стандарден
влез ( stdin ), стандарден излез ( stdout )
и стандардна грешка ( stderr ).
fopen – параметри и значење

Превземено http://www.cplusplus.com/reference/cstdio/fopen/
Задачи за вежби
Дополнување:
https://mendo.club/Lecture.do?id=17
Збирка: Дел со датотеки, со посебен акцент 9.3., 9.4., 10.2 и
завршни примери , Во корелација со задачи 7.2, 7.3., 7.4.,7.5
од ВоП1 Збирка.

You might also like