Fișiere. Mai mult, din punct de vedere al implementării tehnice la nivel hardware, fișiere text sunt un caz special de fișiere binare și astfel, în sensul larg al cuvântului, orice fișier se potrivește definiției „fișierului binar”.
În general, acest termen reprezintă o măsură a atitudinii consumatorului fișier binarși fișierul în sine. Dacă consumatorul cunoaște structura și regulile prin care este capabil să se transforme acest dosar la un nivel superior, atunci nu este binar pentru el. De exemplu, fișierele executabile sunt binare pentru utilizatorul computerului, dar nu sunt binare pentru sistemul de operare. [ ]
Pentru reprezentare vizuală fișier binar este rupt în bucăți de dimensiuni egale, reprezentate ca numere, scrise de obicei în hexazecimal, uneori în octal, binar sau zecimal. Dimensiunea chunk-ului indicată poate fi egală cu un octet, precum și cu doi sau patru (în cazul împărțirii în bucăți de mai mulți octeți, se folosește ordinea octetilor adoptată pe platforma utilizată). Dependența intervalului de numere reprezentate de dimensiunea piesei este prezentată în tabel:
octeți | număr de biți | hexazecimal | octal | zecimal nesemnat |
zecimal iconic |
---|---|---|---|---|---|
1 | 8 | 00 … FF |
000 … 377 |
0 … 255 |
-128 … 127 |
2 | 16 | 0000 … FFFF |
000000 … 177777 |
0 … 65535 |
-32768 … 32767 |
4 | 32 | 00000000 … FFFFFFFF |
00000000000 … 37777777777 |
0 … 4294967295 |
-2147483648 … 2147483647 |
Adesea, pe lângă valorile numerice ale octeților, sunt afișate și caractere ale paginii de cod, cum ar fi ASCII. Următorul exemplu arată așa-numitul. groapa clasică(reprezentare hexazecimală octet-cu-octet de 16 octeți pe linie, cu caractere ASCII imprimabile în partea dreaptă) a începutului fișierului PNG logo-ul Wikipedia:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 87 00 00 00 a0 08 03 00 00 00 11 90 8f |............| 00000020 b6 00 00 00 04 67 41 4d 41 00 00 d6 d8 d4 4f 58 |.....gAMA.....OX| 00000030 32 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |2....tEXtSoftwar| 00000040 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e.Adobe ImageRea| 00000050 64 79 71 c9 65 3c 00 00 03 00 50 4c 54 45 22 22 |dyq.e<....PLTE""| 00000060 22 56 56 56 47 47 47 33 33 33 30 30 30 42 42 42 |"VVVGGG333000BBB| 00000070 4b 4b 4b 40 40 40 15 15 15 4f 4f 4f 2c 2c 2c 3c |KKK@@@...OOO,<| 00000080 3c 3c 3e 3e 3e 3a 39 39 04 04 04 1d 1d 1d 35 35 |<<>>>:99......55| 00000090 35 51 50 50 37 37 37 11 11 11 25 25 25 0d 0d 0d |5QPP777...%%%...| 000000a0 27 27 27 1a 1a 1a 38 38 38 2a 2a 2a 08 08 08 20 |"""...888**... | 000000b0 20 20 17 17 17 2e 8 8bb | . ............|
Fișiere. Mai mult, din punct de vedere al implementării tehnice la nivel hardware, fișierele text reprezintă un caz special de fișiere binare și astfel, în sensul larg al cuvântului, orice fișier se potrivește definiției de „fișier binar”.
Fișierele binare sunt adesea folosite pentru a face referire la fișiere executabile și date comprimate, dar este incorect să limitați acest concept în acest fel.
Pentru a reprezenta vizual un fișier binar, acesta este împărțit în bucăți de dimensiuni egale, reprezentate ca numere, scrise de obicei în hexazecimal, uneori în octal, binar sau zecimal. Dimensiunea chunk-ului indicată poate fi egală cu un octet, precum și cu doi sau patru (în cazul împărțirii în bucăți de mai mulți octeți, se folosește ordinea octetilor adoptată pe platforma utilizată). Dependența intervalului de numere reprezentate de dimensiunea piesei este prezentată în tabel:
octeți | număr de biți | hexazecimal | octal | zecimal nesemnat |
zecimal iconic |
---|---|---|---|---|---|
1 | 8 | 00 … FF |
000 … 377 |
0 … 255 |
-128 … 127 |
2 | 16 | 0000 … FFFF |
000000 … 177777 |
0 … 65535 |
-32768 … 32767 |
4 | 32 | 00000000 … FFFFFFFF |
00000000000 … 37777777777 |
0 … 4294967295 |
-2147483648 … 2147483647 |
Adesea, pe lângă valorile numerice ale octeților, sunt afișate și caracterele paginii de cod, de exemplu, caractere ASCII tipărite în partea dreaptă) la începutul fișierului PNG logo-ul Wikipedia:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 87 00 00 00 a0 08 03 00 00 00 11 90 8f |............| 00000020 b6 00 00 00 04 67 41 4d 41 00 00 d6 d8 d4 4f 58 |.....gAMA.....OX| 00000030 32 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |2....tEXtSoftwar| 00000040 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e.Adobe ImageRea| 00000050 64 79 71 c9 65 3c 00 00 03 00 50 4c 54 45 22 22 |dyq.e<....PLTE""| 00000060 22 56 56 56 47 47 47 33 33 33 30 30 30 42 42 42 |"VVVGGG333000BBB| 00000070 4b 4b 4b 40 40 40 15 15 15 4f 4f 4f 2c 2c 2c 3c |KKK@@@...OOO,<| 00000080 3c 3c 3e 3e 3e 3a 39 39 04 04 04 1d 1d 1d 35 35 |<<>>>:99......55| 00000090 35 51 50 50 37 37 37 11 11 11 25 25 25 0d 0d 0d |5QPP777...%%%...| 000000A0 27 27 27 1A 1A 1A 38 38 38 2A 2A 2A 08 08 08 20 | "" "" ... 888 *** ... | 000000B0 20 20 17 17 17 2E 2E 2E 13 13 13 BB BB BB 88 88 | ...............|
Fundația Wikimedia.
Vedeți ce este un „fișier binar” în alte dicționare: Substantiv, m., folosit. comparaţie adesea Morfologie: (nu) ce? dosar, nu? dosar, (vezi) ce? dosar, ce? dosar, despre ce? despre dosar; pl. Ce? fișiere, (nu) ce? fisiere, ce? fișiere, (văd) ce? fisiere, ce? fișiere, despre ce? despre fișiere 1. Un fișier este o matrice... ...
Fișier binar în sensul cel mai larg: o secvență de octeți arbitrari. Numele se datorează faptului că octeții constau din biți, adică cifre binare. În sensul restrâns al cuvântului, fișierele binare sunt opuse fișierelor text.... ... Wikipedia
Fișier binar în sensul cel mai larg: o secvență de octeți arbitrari. Numele se datorează faptului că octeții constau din biți, adică cifre binare. În sensul restrâns al cuvântului, fișierele binare sunt opuse... ... Wikipedia
fișier de configurare- Un fișier binar sau text care conține informații care determină comportamentul unei aplicații, computer sau dispozitiv de rețea. Subiecte de rețea de computere EN fișier de configurare...
Ghidul tehnic al traducătorului
Acest termen are alte semnificații, vezi IPA (sensuri). Format .IPA pentru fișiere de arhivă ale aplicațiilor Apple pentru iPhone, iPod Touch și iPad. Fișierele cu această extensie sunt stocate în App Store și descărcate folosind iTunes pentru... ... Wikipedia
Acest articol sau secțiune necesită revizuire. Nu există module, POO sau alte tendințe noi în Pascal. Descrierile extensiilor ar trebui să fie prezente numai în articolele despre ... Wikipedia corespunzătoare
Pascal Semantică: procedurală Tip de execuție: compilator Apărut în: 1970 Autor(i): Niklaus Wirth Pascal este un limbaj de programare de nivel înalt de uz general. Unul dintre cele mai cunoscute limbaje de programare, pe scară largă... ... Wikipedia
Nume Gopher: Port/ID Gopher: 70/TCP Specificație: RFC 1436 Implementări principale (clienți): Mozilla Firefox, Microsoft Windows: IE 5.x, IE 6 (limitat la MS) Protocolul de rețea Gopher pentru preluare distribuită și transfer de documente, anterior folosit pe scară largă... Wikipedia
Nume: Gopher Port/ID: 70/TCP Specificație: RFC 1436 Principalele implementări (clienți): Mozilla Firefox, Microsoft Windows: Internet Explorer 5.x, Internet Explorer 6 (limitat la MS) Protocol de rețea Gopher pentru căutare și transmisie distribuită.. . ... Wikipedia
- / * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Notă: Deoarece extensia numelui de fișier poate fi orice, lista furnizată nu este completă... Wikipedia
Vom încerca să explicăm totul în cei mai simpli termeni posibil, pentru că astfel de informații sunt utile pentru fiecare utilizator, chiar și pentru cel mai neexperimentat, deoarece este direct legată de elementele de bază ale securității computerului.
Fișierul text conține caractere ASCII (abrevierea înseamnă American Standard Code for Information Interchange, ceva de genul „American Standard Code for Information Interchange”).
De fapt, ASCII este un tabel în care fiecărei litere, număr, semn de punctuație și diverși „câini” cu „fulgi de zăpadă” (în sensul de @ și *) sunt alocați câte un octet. Adică opt zerouri și unu (biți). În plus, desigur, controlează personaje precum noua linie.
Un program pentru deschiderea fișierelor cu caractere ASCII convertește octeții în litere, numere și alte caractere imprimabile pe afișaj. Desigur, software-ul trebuie să înțeleagă acea parte a tabelului care corespunde limbii ruse, dar aceasta este deja o chestiune de codificare.
Într-un fișier binar, zerourile și unurile sunt aranjate în secvențe care nu sunt neapărat necesare pentru afișarea textelor (deși există unele, de exemplu, *doc). De ce, întrebi. Răspunsul este simplu: pentru orice altceva. Programe, filme, muzică, imagini - fiecare format are propriile sale principii structurale de organizare a datelor.
Cuvântul „binar” în sine înseamnă „format din două componente”, „dublu”. Într-adevăr, este posibil să definiți clar doar două componente - zero și unu, biți, „cărămizi” din care este compus fișierul. Semnificația tuturor celorlalte poate apărea doar în timpul pornirii (deschidere, redare).
Puteți căuta în interiorul fișierului binar folosind un program special - un editor HEX. (Din cuvântul Hexazecimal, care denotă sistemul numeric hexazecimal.) Un astfel de software arată octeții sub forma denumirilor lor HEX, care sunt de fapt localizați și sub forma unui tabel (matrice).
De exemplu, octeții unei imagini în format JPEG, o imagine obișnuită sau o fotografie, vor fi afișați în fereastra editorului ca FF D8 FF 00 04 3A 29 și așa mai departe.
Un specialist va înțelege că secvența de octeți FF D8 de la început indică faptul că acesta este un JPEG. Dar toate acestea nu sunt atât de interesante pentru nespecialiști.
De asemenea, puteți deschide un fișier text într-un editor HEX pentru a vedea ce octeți corespund unor anumite litere (caractere ASCII). Dar doar din curiozitate, tot nu are rost.
Dar fișierele binare sunt uneori vizualizate în format hexazecimal pentru scopuri destul de semnificative și specifice. De exemplu, specialiștii din laboratorul antivirus caută cod rău intenționat adăugat celui principal în acest fel. Apropo, să trecem la problemele de securitate.
Un fișier text nu poate conține altceva decât caractere ASCII. Cu toate acestea, programele nu sunt doar binare, ci și constau din simbolurile de mai sus. Mă refer la scenarii, desigur.
Cu alte cuvinte, fișierul *txt nu este infectat în principiu și nu reprezintă o amenințare. Și dacă există un script în interiorul unui fișier text, atunci poate cauza multe probleme.
De exemplu, fișierul *bat conține codul diferitelor comenzi și este lansat prin dublu clic, ca un program obișnuit. Acele comenzi sunt scrise cu caractere ASCII, dar sistemul de operare știe să le interpreteze - transformă-le în zerouri și în unele tipice pentru programe.
Dar, desigur, nu dați clic pe fișiere bat necunoscute, nu? Asta e bine.
Publicații anterioare:
Ultima modificare: 06-11-2012 14:45:16
Etichete materiale: ,
Exemplele pe care le-am luat în considerare până acum au demonstrat intrarea/ieșirea formatată a informațiilor în fișiere. Este recomandabil să utilizați fișiere formatate de intrare/ieșire a numerelor numai atunci când acestea sunt mici ca dimensiune și cantitate, precum și atunci când este necesar să se ofere posibilitatea de a vizualiza fișiere folosind mijloace non-programatice. Altfel, desigur, este mult mai eficient să folosiți I/O binare, care stochează numere în același mod ca în OP-ul computerului, mai degrabă decât ca șiruri de caractere. Permiteți-mi să vă reamintesc că o valoare întreagă (int) sau reală (float) ocupă 4 octeți în memorie, o valoare dublă ia 8 octeți, iar o valoare char ia 1 octet. De exemplu, numărul 12345 dintr-un fișier text (formatat) are 5 octeți, iar într-un fișier binar are nevoie de 4 octeți.
Fișiere binare, adică fișierele în care informațiile sunt stocate într-o formă de reprezentare internă sunt utilizate pentru utilizare ulterioară de către software nu pot fi vizualizate non-software; Avantajul fișierelor binare este că, în primul rând, la citire/scriere, nu se pierde timpul la conversia datelor din forma simbolică de reprezentare în cea internă și invers, iar în al doilea rând, nu există pierderi de precizie a numerelor reale. Atât în cazul intrării/ieșirii formatate, cât și în cazul intrării/ieșirii binare, pentru a procesa „corect” informații dintr-un fișier, trebuie să știți ce tipuri de date, cum și în ce secvență sunt scrise în binar fișier, mai ales că vizualizarea unui fișier binar folosind un editor de text nu va face nimic.
Să luăm în considerare un exemplu care demonstrează scrierea elementelor întregi ale unui tablou dinamic într-un fișier binar și citirea lor din acest fișier.
#include
#include
#include
folosind namespace std;
cout<< "Vvedite kol-vo elementov celochisl. massiva: "; cin >> N;
int *mas = new int [N];
pentru(i=0; i cout<< " Vvedite " << i << "-i element: "; cin >> mas[i]; cout<< "\nIdet zapis dannyh v fail..." << endl; ofstream fout("c:\\os\\bin.dat", ios::binary);//creat Ieșire flux binar if(!fout) ( cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }
fout.write(reinterpret_cast fout.close();//închiderea fluxului cout<< "Dannye uspeshno zapisany!" << endl; pentru(i=0; i ifstream fin("c:\\os\\bin.dat", ios::binary); //creez un thread pentru a citi fișierul if(!fin) ( cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; } cout<< "Fail sodergit:" << endl; fin.read(reinterpret_cast pentru(i=0; i getch(); întoarce 0; În acest program, o atenție deosebită trebuie acordată utilizării funcțiilor write() (metoda clasei ofstream) și read() (metoda clasei ifstream). Aceste funcții gândesc datele în termeni de octeți și sunt concepute pentru a transfera un anumit număr de octeți dintr-un buffer de date într-un fișier și înapoi. Parametrii acestor funcții sunt adresa tampon și lungimea acesteia în octeți. Funcția write() este concepută pentru a scrie într-un fișier numărul de octeți specificat în al doilea parametru dintre cei specificați în primul parametru adrese tampon de date, iar funcția read() este concepută pentru a citi date dintr-un fișier. Trebuie remarcat aici că aceste funcții funcționează numai cu un buffer de date de tip char. În acest sens, în acest program am folosit operatorul reinterpret_cast<>
care convertește tamponul nostru de date de tip int (mas) într-un tampon de tip char. Este important de reținut că turnarea folosind operatorul reinterpret_cast ofstream fout(nume fișier, ios::app | ios::binary); fout.write(reinterpret_cast Acum este necesar să discutăm al doilea parametru al funcțiilor luate în considerare. În acest program, ca al doilea parametru am folosit expresia N*sizeof(int), cu care am calculat numărul de octeți. De exemplu, dacă avem 5 elemente de matrice întregi, atunci numărul de octeți va fi 20. Funcția sizeof() returnează numărul de octeți alocați pentru tipul de date specificat ca parametru. De exemplu, sizeof( int) va reveni 4. Deci, programul dat în acest exemplu vă permite să scrieți date în formă binară în fișierul bin.dat și să le citiți din acest fișier binar. Mai mult decât atât, după citire, aceste date sunt convertite în tipul int, capătă o structură matrice și orice operație poate fi efectuată cu aceasta. Acum, imaginați-vă că trebuie să scrieți un program care vă permite să citiți date din fișierul bin.dat și știm doar că acest fișier conține elementele unui tablou întreg în formă binară. Numărul de elemente scrise ( N ) nu știm. Când creăm un program, nu avem dreptul de a folosi o matrice constantă, adică. alocați-i memorie în etapa creării programului. Acest lucru va duce la un rezultat eronat. Deoarece o valoare N prea mică va duce la nu toate elementele matricei să fie numărate, iar o valoare N prea mare va duce la umplerea celulelor suplimentare cu valori aleatorii. Să luăm în considerare un exemplu de program care vă permite să citiți elementele unui tablou întreg dintr-un fișier binar prin alocarea dinamică a memoriei și, pentru a demonstra realismul datelor citite, calculați suma acestora. #include #include #include folosind namespace std; int N, i, sum=0, dfb; //dfb - lungimea fișierului în octeți ifstream fin("c:\\os\\bin.dat", ios::binar); if(!fin) ( cout<< "Oshibka otkrytiya faila!"; getch(); return 1; } fin.seekg(0, ios::end);//setează poziția de citire la sfârșitul fișierului (0 octeți de la sfârșit) dfb = fin.tellg();// obțineți valoarea poziției de la sfârșitul fișierului (în octeți) N=dfb/4;//știind că un număr întreg are 4 octeți, calculează numărul de numere int *arr = int nou [N];//creăm o matrice dinamică fin.seekg(0, ios::beg);//înainte de a citi datele, mutați poziția curentă la începutul fișierului fin.read(reinterpret_cast cout<< "Iz faila schitano " << N << " elementov:" << endl; pentru(i=0; i pentru(i=0; i cout<< "\n Ih summa = " << sum; getch(); întoarce 0; Să aruncăm o privire mai atentă la acest program, în care am folosit activ funcțiile seekg() și tellg(), care sunt metode ale clasei ifstream. Trebuie remarcat aici că Orice fișier atunci când este deschis este asociat cu o așa-numită poziție curentă de citire sau scriere. Când un fișier este deschis pentru citire, această poziție implicită este setată la începutul fișierului. Dar destul de des este necesar să controlați manual poziția pentru a putea citi și scrie pornind de la o locație arbitrară din fișier. Funcțiile seekg() și tellg() vă permit să setați și să verificați indicatorul de citire curent, în timp ce funcțiile seekp() și tellp() fac același lucru pentru pointerul de scriere. Metoda seekg(1_parameter, 2_parameter) mută poziția curentă de citire din fișier cu numărul de octeți specificat în parametrul 1 în raport cu locația specificată în parametrul 2. 2_parameter poate lua una dintre cele trei valori: ios::beg – de la începutul fișierului; ios::cur – din poziția curentă; ios::end – de la sfârșitul fișierului. Aici beg, cur și end sunt constante definite în clasa ios, iar simbolurile:: reprezintă operația de acces la această clasă. De exemplu, operatorul fin.seekg(-10, ios::end); vă permite să setați poziția curentă de citire dintr-un fișier la 10 octeți înainte de sfârșitul fișierului. Acum să revenim la descrierea funcționării programului. Pe baza faptului că nu știm numărul de numere scrise în fișier, trebuie mai întâi să aflăm numărul de numere. Pentru a face acest lucru, folosind fin.seekg(0, ios::end); trecem la sfârșitul fișierului și, folosind funcția tellg(), returnăm lungimea fișierului în octeți variabilei dfb. Funcția tellg() returnează poziția curentă a indicatorului în octeți. Deoarece știm lungimea unui număr întreg în octeți (4 octeți), este ușor să calculăm numărul de numere scrise în fișier, știind lungimea fișierului în octeți ( N=dfb/4;). După ce am aflat numărul de numere, creăm o matrice dinamică și trecem la începutul fișierului pentru a începe să citim datele folosind funcția read(). După ce numărul specificat de octeți de date (dfb) este transferat în bufferul de date (arr), datele citite în acest fel capătă o structură matrice și devin pe deplin potrivite pentru orice operațiuni și transformări de cod. Toate informațiile sunt stocate în computer sub formă de 0 și 1, adică în formă binară. Fișierele binare diferă de fișierele text numai prin metodele de lucru cu acestea. De exemplu, dacă scriem numărul „4” într-un fișier text, atunci acesta este scris ca un caracter și este nevoie de un octet pentru a-l stoca. În consecință, dimensiunea fișierului va fi egală cu un octet. Un fișier text care conține intrarea: „145687” va avea dimensiunea de șase octeți. Dacă scriem întregul 145.687 într-un fișier binar, acesta va avea o dimensiune de patru octeți, deoarece este necesar pentru stocarea datelor int. Adică, fișierele binare sunt mai compacte și, în unele cazuri, mai ușor de procesat. Pentru a deschide un fișier binar, trebuie să setați modul de acces la ios::binary (în unele compilatoare C++, ios::bin). Pentru a crea un fișier de ieșire, creați un obiect: ofstream outBinFile("out.bin", ios::out | ios::binary); /* crearea unui obiect de clasă ofstream afară. coșul de gunoi dacă (! out_f i 1) //verificare standard Datele sunt scrise folosind metoda write(), care are doi parametri: primul este un pointer la începutul (adresa de pornire) a datelor care sunt scrise, al doilea este numărul de octeți care trebuie scrisi. În acest caz, indicatorul trebuie convertit în mod explicit la tipul char. Exemplul 1. Scrieți variabile de diferite tipuri într-un fișier binar: ofstream outBinFile ("test.bin", ios::out I ios: :binar) ; /^crearea unui obiect de clasă de pârâu și încercând să-l conecteze la un fișier test. coșul de gunoi în modul de scriere a fișierelor binar */ int a - 145687; //declararea unei intregi variabile O outBinFi le. scrie ((car*) &a, sizeof (a)) ; /^ scrie în fișier variabilă O ca un flux de octeți, adică scrierea într-un fișier a reprezentării interne a întregii variabile a */ float x - 123,25; // declararea unei variabile reale X outBinFile .write ((car*) &x, sizeof (x)) ; /^ scrie în fișier variabilă X ca un flux de octeți, adică scrierea într-un fișier a reprezentării interne a întregii variabile x*/ //definirea unei variabile simbolice Cu şi iniţializandu-l cu simbolul g outBinFile.write((char*)&c, sizeof(c)); //înregistrați un simbol g a dosar outBinFile.close(); întoarce 0; Dacă deschideți conținutul fișierului .bin de testare cu un editor de text, acesta va arăta astfel: iar dimensiunea fișierului va fi de 9 octeți. Pentru a deschide un fișier binar existent pentru citire, trebuie să creați un obiect: ifstream inpBinFile("inp.bin", ios::in I ios::binary); /* folosim o disjuncție de steaguri care indică faptul că fișierul este deschis pentru citire în formă binară */ dacă (! inpBinFile) coutPentru a citi datele, folosim funcția read(), care are parametri similari cu funcția write(). #include folosind namespace std; int main() ifstream inpBinFile("test.bin", ios::in I ios::binar); / / deschide fișierul pentru citire în formă binară int a; float x; char c = "g"; inpBinFile.read((char*)&a, sizeof(a)); //citește o variabilă întreagă inpBinFile.read((char*)&x, sizeof(x)); //citește o variabilă reală inpBinFile.read((char*)&c, sizeof (c)); //citește o variabilă simbolică inpBinFile.close(); cout Rezultatul programului: a = 145687 x = 123,25 s = g Vă rugăm să rețineți că nu are loc conversie de informații atunci când utilizați funcțiile de scriere și citire. Reprezentarea internă a datelor este scrisă și citită din fișier. De aceea cele două programe anterioare au dat rezultatul corect. Spre deosebire de fișierele text, lucrul cu tipuri de date personalizate folosind fișiere binare nu este diferit de tipurile de date standard. Metodele write() și read() sunt utilizate în mod similar. Programatorul trebuie doar să indice adresa secțiunii de memorie care urmează să fie scrisă și numărul de octeți care urmează să fie scris, ținând cont că nu are loc conversie de date, se scrie și se citește doar reprezentarea internă a informațiilor. De asemenea, atunci când lucrați cu fișiere binare, se pot folosi metodele seekg(), tellg(), seekp(), tellp(). Exemplul 3. Scrieți un program care scrie informații despre un grup de turiști într-un fișier binar. fstream BinFile("ankety.bin", ios::in I ios::out | ios::binary); Anketa Gruppa = ; pentru (int i = 0; i BinFile.write((char*)&Gruppa[i], sizeof(Anketa)); BinFile.close(); întoarce 0; Exemplul 4. Fișierul „ankety.bin” conține date despre un grup de turiști, este necesar să îl citiți și să îl afișați pe ecran. #include folosind namespace std; struct chestionar ( nume char; int vârsta;
tip de date structurale Chestionar la ecran*/ ostream& operator fstream BinFile("ankety.bin", ios::in | ios::out | ios::binary); dacă (!BinFile) pentru (int i = 0; i //citește imediat toți octeții ocupați de variabila de tip Anketa BinFile.read((char*)&Gruppa[i], sizeof(Anketa)); BinFile.close(); întoarce 0; Rezultatul programului: Ivanov, 23 Sidorov, 21 Petrov,22 Pentru a continua, apăsați orice tastă. . . Este incomod să folosești în mod constant metodele write() și read() este mult mai plăcut să poți folosi operațiunile „>” prin analogie cu fișierele text; Să dăm un exemplu de implementare a clasei noastre pentru lucrul cu fișiere binare. folosind namespace std; struct Chestionar //declară o structură pentru stocarea informațiilor /*supraîncărcați operația de inserare într-un flux pentru ieșire personalizată tip de date structurale Chestionar la ecran*/ ostream& operator clasa outBinaryFile: public of stream /^ definește clasa noastră pentru lucrul cu fișiere binare de ieșire. O derivăm din clasa pentru lucrul cu fluxuri de fișiere de ieșire */ /*când descrieți constructorul unei clase generate, nu uitați să apelați constructorul clasei de bază, trecându-i parametrii necesari*/ outBinaryFile(car* nume): ofstream(nume, ios::out I ios::binar) //supraîncărcați operațiile necesare ca metode de clasă operator outBinaryFile& scrie((char*)&chislo, sizeof(chislo)); returnează *aceasta; operator outBinaryFile& scrie((car*)&ank, sizeof(ank)); returnează *aceasta; clasa inpBinaryFile: public if stream /* Definim clasa noastră pentru lucrul cu fișiere binare de intrare. O derivăm din clasa pentru lucrul cu fluxuri de fișiere de intrare */ inpBinaryFile(char* name): ifstream(nume, ios::in I ios::binary) /*apelarea constructorului clasei de bază cu parametrii necesari, suficient pentru constructorul clasei derivate */ //supraîncărcați operațiunile necesare inpBinaryFile& operator >> (int& number) read((char*)&chislo, sizeof(chislo)); returnează *aceasta; inpBinaryFile& operator >> (Anketa& ank) read((char*)&ank, sizeof(ank)); returnează *aceasta; int a = 111, b = 112; outBinaryFile outFile("dannye.bin"); //deschideți fișierul pentru citire inpBinaryFile inpFile("dannye.bin"); dacă (!inpFile) pentru (int i = 0; i inpFile >> a; //citește profilul din fișier cout //și afișează-l pe ecran inpFile >> chestionar; cout Rezultatul programului: Kolya, 1990, 582-78-95. Pentru a continua, apăsați orice tastă. . . 1. Este posibil să folosiți o operație într-un program? ios::in I ios::out H. Ce va fi afișat pe ecran ca urmare a executării următorului cod? inputFile.get(c); următorul - inputFile.peek(); dacă (următorul == EOF) Întrebări de securitateLucrul cu fișiere binare
Scrierea tipurilor de date standard în fișiere binare
Citirea tipurilor de date standard din fișiere binare
Scrierea și citirea tipurilor de date personalizate în fișiere binare
Dezvoltarea propriilor clase pentru lucrul cu fișiere