ФАЙЛДЫ АШУ РЕЖИМДЕРІ



Жұмыс түрі:  Курстық жұмыс
Тегін:  Антиплагиат
Көлемі: 22 бет
Таңдаулыға:   
ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ
Ш. УӘЛИХАНОВ атындағы КӨКШЕТАУ МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ

КУРСТЫҚ ЖОБА
Объектіге бағытталған бағдарламалау 1 пәні бойынша
тақырыбына:
С++ бағдарламалау тілінде файлдармен жұмыс жасау

Жоба әзірленді:
Екінші курс студенті
Канапиянов Бауыржан Канатович
ИСК 201 ДК тобы

Ғылыми жетекші
Аға оқытушы
Есмагамбетова Г. К.

Көкшетау 2021ж
ЖОСПАР
1. КІРІСПЕ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..3 2. C++ КӨМЕГІ АРҚЫЛЫ ФАЙЛДАРМЕН ЖҰМЫСТЫ ҰЙЫМДАСТЫРУ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .4
3. ФАЙЛДЫ АШУ РЕЖИМДЕРІ ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... .4
4. ФАЙЛДЫ ОРЫНДАУ КЕЗІНДЕГІ ҚАТЕЛЕРДІ ТЕКСЕРУ
ОПЕРАЦИЯЛАРЫ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .6
5. ФАЙЛДЫН СОНЫН АНЫҚТАУ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..7
6. ФАЙЛДЫ ЖАБУ КЕРЕК БОЛМАСА ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..9
7. ОҚУ ЖӘНЕ ЖАЗУ ОПЕРАЦИЯЛАРЫН ОРЫНДАУ ... ... ... ... ... ... ... ... ... 9
8. ЕКІЛІК ФАЙЛДАРДЫ ӨҢДЕУ ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... .11
9. БЛОКТАУ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 15
10. ОРНАЛАСТЫРУ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..1 5
11. АШЫҚ ФАЙЛ СИПАТТАМАЛАРЫ ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ...16
12. ҚОЛДАНБАЛЫ ЖҰМЫС ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... .18 13. ҚОРЫТЫНДЫ ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .28 14. ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР ТІЗІМІ: ... ... ... ... ... ... ... ... ... ... ... ..27

КІРІСПЕ
Компьютерлік бағдарламалардың көпшілігі файлдармен жұмыс істейді, сондықтан файлдарды құру, жою, жазу, оқу, ашу қажеттілігі туындайды. Файл дегеніміз не? Файл -- бұл мүмкін болатын байттардың жиыны, файл кейбір жад құрылғысында сақтала алады. Файл - деп ақпаратты физикалық құрылғыда сақтау әдісін айтады. Осыдан файлдар байттардың белгілі бір тізбегі екенін көре аламыз, мысалы: файл.txt бірегей атауы. Бір каталогта атаулары бірдей файлдар бола алмайды. Файл атауы тек оның атауы ретінде ғана емес, сонымен қатар онын кеңейтімін де айтуға болады, мысалы: file.txt және file.dat әртүрлі файлдар, дегенмен атаулары бірдей. Файлдардың толық атауы сияқты нәрсе бар. Файлдын толық атауы деген сөз тіркесі бағдарламауда жие кездеседі, ол дегеніміз файлдын толық мекенжайы, мысалы: D:\docs\file.txt. Бұл негізгі ұғымдарды түсіну маңызды, әйтпесе файлдармен жұмыс істеуге қиын болады. C ++ тілінде файл операторлары жоқ. Барлық қажетті әрекеттер стандартты кітапханаға енгізілген функциялар арқылы орындалады. Олар әртүрлі құрылғылармен жұмыс істеуге мүмкіндік береді, мысалы, дискілер, принтерлер, байланыс арналары және т.б. Бұл құрылғылар бір-бірінен өте ерекшеленеді. Дегенмен файлдық жүйе оларды түрлендіреді, одан ағын деп аталатын жалғыз абстрактілі логикалық құрылғы туындайды.
Мәтін ағыны - бұл символдар тізбегі. Таңбаларды жіберу кезінде ағыннан экранға дейін олардың кейбіреулері көрсетілмейді (мысалы, қайтару таңбасы, каретка, жол беру).
Екілік ағын - Бұл бірегей байт тізбегі, сыртқы құрылғыдағыға сәйкес келеді.

C++ көмегі арқылы файлдармен жұмысты ұйымдастыру

Ағындарды пайдалана отырып файлды енгізушығару:
-Fstream ағынының енгізу-шығару кітапханасы
-Файлдың шығыс ағынымен байланысы: ofstream - логикалық файлдың аты;
-Файлдың кіріс ағынымен байланысы: ifstream - логикалық файлдың аты;
-Ашық файл логикалық файл аты .open (файлдың физикалық аты);
-Файлды жабу логикалық файл атауы .close ();

Файлды ашу режимдері

Файлды ашу режимдері файлдарды пайдалану жолын белгілейді. ios_base класында режимді орнату үшін тұрақтылар беріледі, олар болса файлдарды ашу режимін анықтайды (1 кестені қараңыз).

1-кесте - файлды ашу режимдері
Тұрақты (константа)
Сипаттама
ios_base::in
файлды оқу үшін ашу
ios_base::out
файлды жазу үшін ашу
ios_base::ate
ашқан кезде меңзерді файлдың соңына жылжыту
ios_base::app
файлдың соңына ашу үшін
ios_base::trunc
файл бар болса, оны жою
ios_base::binary
файлды екілік режимде ашу
Файлды ашу режимдерін тікелей объект құру немесе open() функциясын шақыру арқылы жүзеге асыруға болады.

offstreamfout (cppstudio.txt, ios_base :: қолданбасы); файлды ашыңыз
1. файлдың соңына ақпаратты қосу үшін
2. fout.open (cppstudio.txt, ios_base :: қолданбасы); файлдың соңына ақпаратты қосу үшін файлды ашамыз

Файлды ашу режимдерін разрядтық логикалық операция арқылы біріктіруге болады немесе , мысалы: ios_base :: out ios_base :: trunc - файлды тазартқаннан кейін жазу үшін ашу.
Ofstream класының объектілері файлдармен байланыстырылған кезде ios_base :: out ios_base :: trunc режимдерінін файлдын ашу режимін қамтиды. Яғни, файл болмаса ол өздігінен жасалады. Егер файл бар болса, онда оның мазмұны жойылады және файлдың өзі жазуға дайын болады. Объектілер файлға ifstream класы сілтемелерінің әдепкі режимі бар ios_base :: файлын ашу - файл тек оқу үшін ашық. Режим файлды ашу - жалауша деп те аталады, оқуға ыңғайлы болу үшін келесіде біз дәл осы терминді қолданамыз. 1-кесте барлық жалаушалар тізімде жоқ, бірақ бастапқыда бұл жеткілікті болуы керек.
Ate және app жалаулары сипаттамада өте ұқсас екенін ескеріңіз, екеуі де меңзерді файлдың соңына жылжытады, бірақ app жалаушасы тек файлдын соңына жазуға ғана мүмкіндік береді, ал ate жалауды файлдын соңына жылжытса да, жазуға шектеуі жоқ.
Sizeof() операциясын қолданып орындайтын бағдарламаны құрастырайық, C++ тілінде негізгі деректер типтерінің сипаттамаларын есептеп, оларды файлға жазып алу. Техникалық сипаттамалар:

1.деректер түрі үшін бөлінген байттардың саны
2.белгілі бір деректердін, ең көп сақтай алу мәні
Файлға жазу келесі форматта орындалуы керек:
1 * data type byte max value
2 bool = 1 255.00
3 char = 1 255.00
4 short int = 2 32767.00
5 unsigned short int = 2 65535.00
6 int = 4 2147483647.00
7 unsigned int = 4 4294967295.00
8 long int = 4 2147483647.00
9 unsigned long int = 4 4294967295.00
10 float = 4 2147483647.00
11 long float = 8 9223372036854775800.00
12 double = 8 9223372036854775800.00 *



ФАЙЛДЫ ОРЫНДАУ КЕЗІНДЕГІ ҚАТЕЛЕРДІ ТЕКСЕРУ
ОПЕРАЦИЯЛАРЫ

Осы уақытқа дейін ұсынылған бағдарламаларда енгізушығару әрекеттері кезінде қателер болмайды деп болжанған. Өкінішке орай, бұл әрқашан орындала бермейді. Мысалы, енгізу үшін файлды ашсаңыз, бағдарлама файлдың бар-жоғын тексеруі керек. Сол сияқты, егер сіздің бағдарламаңыз деректерді файлға жазса, ол операциянын сәтті өткенін тексеру керек болады (мысалы, дискілік кеңістіктің жетіспеушілігі деректерді жазуға кедергі келтіреді). Бағдарламаларыңызға көмектесу үшін қателерді қадағалаңыз, сіз сол обьектін fail функциясын қолдану арқылы сол бағдарламаны қадағалай аласыз. Файл жұмысы кезінде қателер болмаса, функция жалған (0) қайтарады. Дегенмен, қате орын алса, сәтсіздік функциясы шындықты қайтарады. Мысалы, егер бағдарлама файлды ашса, оған fail функциясын қолданып кате болды ма жоқ па соны анықтау қажет, төменде көрсетілген:

ifstreaminput_file("FILENAME.DAT");
if (input_file.fail())
{
cerr "АШЫҚ ҚАТЕ FILENAME.EXIT"
}

Осылайша, бағдарламалар операциянын оқылу мен жазылуыннын сәтті өткенін қадағалау керек. Келесі бағдарлама TEST_ALL.CPP әртүрлі қате жағдайларын тексеру үшін сәтсіздік fail функциясын пайдаланады:
#include iostream.h
#include fstream.h
void main(void)
{
char line[256] ;
ifstreaminput_file("BOOKINFO.DAT") ;
if (input_file.fail()) cerr "Ашылу қате BOOKINFO.DAT" endl;
else
{
while ((! input_file.eof()) && (! input_file.fail()))
{
input_file.getline(line, sizeof(line)) ;
if (! input_file.fail()) cout line endl;
}
}
}

ФАЙЛДЫН СОНЫН АНЫҚТАУ

Бағдарламаларыңыздағы жалпы файл операциясы оқу болып табылады, файлдың соңын кездестіргенше дейін. Файлдын соңын анықтау үшін бағдарламалар ағынды нысаннын eof функциясын қолдана алады. Бұл функция файлдың соңы болса ,0 қайтарады әлі кездеспеді және файлдың соңы кездескен болса, 1. Циклды пайдалану бұл уақытта бағдарламаларыңыз файлдың мазмұнын үздіксіз оқи алады төмендегідей файлдың соңын таба алмайды:
while (! input_file.eof())
{
Операторы
}
Бұл жағдайда бағдарлама дейін циклды жалғастырады eof функциясы жалған (0) мәнін қайтарады. Келесі бағдарлама TEST_EOF.CPP BOOKINFO.DAT файлының мазмұнын оқу үшін eof функциясын пайдаланады, файлдың соңына жеткенше:

#include iostream.h
#include fstream.h
void main (void)
{
ifstreaminput_file("BOOKINFO.DAT");
char line[64];
while (! input_file.eof())
{
input_file.getline(line, sizeof(line));
cout line endl;
}
}

Сол сияқты келесі WORD_EOF.CPP бағдарламасы мазмұнды оқиды файлдың соңы кездескенше бір уақытта бір сөзді жіберіңіз:
#include iostream.h
#include fstream.h
void main(void)
{
ifstreaminput_file("BOOKINFO.DAT");
char word[64] ;
while (! input_file.eof())
{
input_file word;
cout word endl;
}
}
Соңында, келесі CHAR_EOF.CPP бағдарламасы мазмұнды оқиды
дейін алу функциясын пайдаланып бір таңбаны файлға жіберіңіз файлдың соңына сәйкес келеді:

#include iostream.h
#include fstream.h
void main(void)
{
ifstreaminput_file("BOOKINFO.DAT");
char letter;
while (! input_file.eof())
{
letter = input_file.get();
cout letter;
}
}

ФАЙЛДЫ ЖАБУ КЕРЕК БОЛМАСА

Бағдарлама аяқталған кезде операциялық жүйе ашық файлдарды жабады. Дегенмен, егер сіздің бағдарламанызға файл қажет болмаса, онда бағдарлама оны жабу керек. Файлды жабу үшін, сіздің бағдарлама төменде көрсетілгендей, жабу функциясын пайдалануы керек:

input_file.close ();

Файлды жапқан кезде, сіздің бағдарламаңыз жазып жатқан барлық деректерді дискіге жібереді, және сол файл үшін каталог жазбасы жаңартылады.

ОҚУ ЖӘНЕ ЖАЗУ ОПЕРАЦИЯЛАРЫН ОРЫНДАУ

Осы сабақта ұсынылған барлық бағдарламалар файлдық операцияларды сиволдар тізбегімен орындады. Сіздің бағдарлама күрделенген сайын сізге массивтерді оқу және жазу қажет болуы мүмкін. Мұны істеу үшін бағдарламалар read және write функцияларын қолданады. Read және write функцияларын пайдаланған кезде буфер деректерін көрсету керек. Бұнда деректер оқылып немесе жазылып және буфердін ұзындығын байттарда, төменде көрсетілгендей:

input_file.read(buffer, sizeof(buffer)) ;
output_file.write(buffer, sizeof(buffer));

Мысалы, келесі бағдарлама STRU_OUT.CPP write функцияны пайдаланып EMPLOYEE.DAT файлына құрылымның мазмұнын файлына шығару үшін қолданылады:

#include iostream.h
#include fstream.h
void main(void)
{
struct employee
{
char name[64];
int age;
float salary;
} worker = { "ДжонДой", 33, 25000.0 };
ofstreamemp_file("EMPLOYEE.DAT") ;
emp_file.write((char *) &worker, sizeof(employee));
}
Write функциясы әдетте таңбалар жолына көрсеткішті алады. (char *) Символы -- кастинг операторы көрсетіп, компиляторға көрсеткішті басқа түрге өткізіп жатқаныңызды хабарлайды. Сол сияқты келесі STRU_IN.CPP бағдарламасы әдісті пайдаланады файлдан қызметкер туралы ақпаратты оқу үшін оқыңыз:

#include iostream.h
#include fstream.h
void main(void)
{
struct employee
{
char name [6 4] ;
int age;
float salary;
} worker = { "ДжонДой", 33, 25000.0 };
ifstreamemp_file("EMPLOYEE.DAT");
emp_file.read((char *) &worker, sizeof(employee));
cout worker.name endl;
coutworker.ageendl;
coutworker.salaryendl;

1. fstream.h тақырып файлы ifstream және offstream, with сыныптарын анықтайды оның көмегімен бағдарлама файл операцияларын орындай алады енгізу және шығару.
2. Файлды енгізу немесе шығару үшін ашу үшін объектіні жариялау керек ifstream немесе offstream түріндегі, осы нысанның конструкторына атауды береді қажетті файл.
3. Бағдарлама енгізу немесе шығару үшін файлды ашқаннан кейін, ол () және шығару операторлары арқылы деректерді оқи немесе жаза алады кірістіреді ().
4. Бағдарламалар файлға таңба енгізуді немесе шығаруды орындай алады немесе алу және қою функцияларын қолданатын файлдан.
5. Бағдарламалар файлдан толық жолды пайдалана алады getline функциясы.
6. Көптеген бағдарламалар файлдың мазмұнын олар кездескенше оқиды файлдың соңы. Бағдарламалар файлдың соңын анықтай алады eof функциялары.
7. Бағдарламаларыңыз файл операцияларын жасағанда, олар қажет транзакциялардың орындалуына көз жеткізу үшін барлық транзакциялардың күйін тексеріңіз сәтті аяқталды. Қателерді тексеру үшін бағдарламаларыңыз мүмкін сәтсіздік функциясын пайдаланыңыз.
8. Егер сіздің бағдарламаларыңызға осындай енгізу немесе шығару қажет болса деректерді құрылымдар немесе массивтер ретінде олар оқу және пайдалануы мүмкін жазу.
9. Егер бағдарлама файлмен жұмыс істеуді аяқтаса, оны жабу керек жабу функциясын пайдалану.

ЕКІЛІК ФАЙЛДАРДЫ ӨҢДЕУ

Екілік файлға ақпаратты жазу кезінде символдар мен сандар жазылады байттар тізбегі ретінде.

Екілік файлға деректерді жазу үшін сізге қажет:

1.оператор көмегімен FAIL * типті файлдық айнымалыны сипаттаңыз FILE * файл аты, мұндағы файл аты айнымалының аты, қай жерде болады файлға көрсеткіш сақталады.
2.fopen функциясы бар файлды ашу
3. fwrite функциясын пайдаланып файлға ақпаратты жазу
4.fclose функциясын пайдаланып файлды жабыңыз
Екілік файлдан деректерді оқу үшін сізге қажет:

1.FILE * типті айнымалыны сипаттаңыз
2.fopen функциясы бар файлды ашу
3.функцияның көмегімен файлдан қажетті ақпаратты оқу
fread файлдың соңына жеткен-жетпегенін бақылау кезінде.
4.fclose функциясын пайдаланып файлды жабыңыз

Екілік файлдармен жұмыс істеу үшін қажетті негізгі функцияларды қарастырайық.

Файлды ашу үшін fopen функциясы қолданылады.
FILE *fopen(const *filename, const char *mode)Мұндағы файл аты - ашылатын файлдың толық атауын сақтайтын жол
файл, режим - файлмен жұмыс істеу режимін анықтайтын жол; мүмкін келесі мәндер:

rb - оқу режимінде екілік файлды ашу;
wb - жазу үшін екілік файл құру; егер ол бар болса, онда оның мазмұны тазаланады;
ab - соңына қосу үшін екілік файлды құру немесе ашу файл;
rb + - бар екілік файлды оқу режимінде ашу және жазбалар;
wb + - екілік файлды оқу және жазу режимінде ашу, бар файл тазаланады;
ab + - екілік файл ашылады немесе бекіту үшін жасалады бар ақпарат және файлдың соңына жаңа ақпаратты қосу.

Функция f файл айнымалысында NULL мәнін қайтарады if файлды сәтсіз ашу. Файлды ашқаннан кейін оның 0-шы байты қолжетімді болады, файл көрсеткіші - 0, оның мәні оқу немесе жазу кезінде оқылған (жазылған) байттардың санына ауыстырылады. Ағымдағы мән файл көрсеткіші - пайда болатын байт саны оқу немесе жазу операциясы.Файлды жабу үшін функцияны пайдаланыңыз fclose: intfclose (FILE * файл аты);
Ол файлды сәтті жабу кезінде 0 мәнін, ал басқа жағдайда EOF мәнін қайтарады. жою функциясы файлдарды жоюға арналған:

int remove(const char *filename);
Бұл функция дискіден filenema деп аталатын файлды жояды. Жойылатын файл жабық болуы керек. Функция нөлден басқа мәнді қайтарады, егер файл жою мүмкін емес. Файлдардың атын өзгерту үшін функцияны пайдаланыңыз:

rename:intrename(constchar *oldfilename, constchar *newfilename);
Бірінші параметр - ескі файл атауы, екіншісі - жаңа. үшін 0 қайтарады
бағдарламаны сәтті аяқтау.Екілік файлдан оқу функциясы арқылы жүзеге асырылады:

fread:fread(void *ptr, size, n, FILE*filename);

Функция fread считывает из файла filename в массив ptr n элементов размера size. Функция возвращает количество считанных элементов. После чтения из файла его указатель смещается на n*size байт.Запись в двоичный файл осуществляется с помощью функции fwrite:

fwrite(const void *ptr, size, n, FILE *filename);

fwrite функциясы файл атауына n элементтен тұратын ptr массивінен жазады өлшем өлшемі. Функция жазылған элементтердің санын қайтарады. Файлға ақпаратты жазғаннан кейін көрсеткіш n * өлшемді байтқа жылжытылады. файлдың соңына жетуді басқару үшін feof функциясы бар:

intfeof(FILE *filename);
Ол файлдың соңына жеткенде нөлден басқа қайтарады. материалды дәл меңгеру, мен жұпты қарастыруды ұсынамын стандартты тапсырмалар.
Мәселе 1
D: \\ game \\ noobs.dat екілік файлын жасаңыз және оған бүтін санды жазыңыз n және n нақты сандар.

Шешімі:
#include "stdafx.h"
#includeiostream
usingnamespacestd;
intmain()
{
setlocale (LC_ALL, "RUS");
intn, i;
doublea;
FILE *f; файлдық айнымалыны сипаттаймыз
жазу режимінде екілік файлды жасаңыз
f=fopen("D:\\game\\noobs.dat", "wb");
нөмірді енгізуn
cout"n="; cinn;
fwrite(&n, sizeof(int), 1, f);
n нақты сандарды енгізу циклі
for (i=0; in; i++)
{
келесі нақты санды енгізу
cout"a=";
cina;
екілік файлға нақты санды жазу
fwrite(&a, sizeof(double), 1, f);
}
файлды жабамыз
fclose(f);
system("pause");
return 0;
}
Мәселе 2
D: \\ game \\ accounts.txt мәтіндік файлы нақты сандарды сақтайды, оларды экранда көрсетіңіз және олардың санын есептеңіз.

Шешімі:

#include "stdafx.h"
#includeiostream
#includefstream
#includeiomanip
#includestdlib.h
using namespace std;
int main()
{
setlocale (LC_ALL, "RUS");
int n=0;
float a;
fstream F;
файлды оқу режимінде ашыңыз
F.open("D:\\sites\\accounts.txt");
егер файл дұрыс ашылған болса, онда
if (F)
{
файлдан мәндерді оқу циклі; циклдің орындалуы үзіледі,
файлдың соңына жеткенде, бұл жағдайда F.eof () шын мәнін қайтарады.
while (!F.eof())
{
F ағынынан a айнымалысына келесі мәнді оқу
Fa;
a айнымалысының мәнін экранға шығару
couta"\t";
оқылатын сандар ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Файлдармен жұмыс
Файл. Файлдар мен қалталар түсінігі
Кездейсоқ қол жетімді файлдар
Word мәтіндік редакторы
Ақпараттарды ықшамдау (архивтеу)
Adobe Photoshop бағдарламасымен жұмыс жасау кезеңдері
Файлды архивтеу
Файлдарды архивтендіру
Файлды архивтеу жайында
MS Word
Пәндер