Zápis a čítanie vlastných dátových typov do binárnych súborov. Ako aktualizovať binárny súbor SU v systéme Android - obnoviť prístup root pre aplikáciu SuperSu

  • 29.07.2019

Súbory. Zároveň z hľadiska technickej implementácie na hardvérovej úrovni sú textové súbory špeciálnym prípadom binárnych súborov, a teda v širšom zmysle slova je na definíciu „binárneho súboru“ vhodný akýkoľvek súbor. súbor“.

Vo všeobecnosti je tento výraz mierou vzťahu medzi spotrebiteľom binárneho súboru a súborom samotným. Ak spotrebiteľ pozná štruktúru a pravidlá, podľa ktorých je schopný daný súbor previesť na vyššiu úroveň, tak to pre neho nie je binárne. Napríklad spustiteľné súbory sú binárne pre používateľa počítača, ale nie sú binárne pre operačný systém. [ ]

Vizualizácia

Pre vizuálnu reprezentáciu binárneho súboru je rozdelený na časti rovnakej veľkosti, reprezentované ako čísla, zvyčajne zapísané v šestnástkovej sústave, niekedy v osmičkovej, binárnej alebo desiatkovej sústave. Uvedená veľkosť časti sa môže rovnať jednému oktetu, ako aj dvom alebo štyrom (v prípade rozdelenia na časti niekoľkých oktetov sa použije poradie bajtov prijaté na použitej platforme). Závislosť rozsahu znázornených čísel od veľkosti dielca je uvedená v tabuľke:

oktety počet bitov hexadecimálny osmičkový desiatkový
nepodpísané
desiatkový
ikonický
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

Okrem číselných hodnôt bajtov sa často vydávajú aj znaky kódovej stránky, ako napríklad ASCII. Nasledujúci príklad ukazuje tzv. klasická skládka(oktetové hexadecimálne znázornenie 16 bajtov na riadok, s tlačiteľnými znakmi ASCII vpravo) na začiatku súboru PNG s logom Wikipédie:

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 |[e-mail chránený]@@...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**... | .............|

Nástroje

Pre vizualizáciu

  • ladenie (v systéme Microsoft Windows, čiastočne)
  • hexdump (vo FreeBSD, GNU/Linux atď.)

Na úpravu

  • HEX editor
    • beye (pre všetky operačné systémy, bezplatný softvér)
    • hiew (pre DOS, Microsoft Windows, Windows NT)
    • WinHex (pre Windows)

Mnoho ľudí má často otázku, ako otvoriť binárny súbor. Tento dokument je akýkoľvek súbor, ktorý sa nachádza v osobnom počítači. Všetky údaje, ktoré sú na počítačoch a médiách s nimi spojené, sa zvyčajne zaznamenávajú v bitoch. Práve z tohto slova vznikol názov. Ak je na porovnanie uvedený jednoduchý textový súbor, potom s jeho čítaním nebudú žiadne problémy. Na to stačí mať v počítači bežný editor, postačí aj poznámkový blok. Na otvorenie binárneho súboru nebude fungovať jednoduchý poznámkový blok. A ak hovoríme o tom, že informácie v textových súboroch sú šifrované rovnakými bitmi, potom zvyčajne, keď hovoria o čítaní binárnych súborov, majú na mysli spustiteľné dokumenty.

Pokyny na akciu

Najprv je potrebné nainštalovať na pevný disk počítača softvérový nástroj s názvom HexEditor, čo je jednoduchý editor binárnych súborov. Po inštalácii by sa mal program otvoriť dvojitým kliknutím na ikonu. Tento nástroj vám umožní čítať binárny súbor v reálnom režime. V tomto prípade môžete zmeniť údaje v súbore, pridať vlastné informácie atď. Aby ste mohli pracovať v tomto editore a upravovať binárny súbor, musíte mať aspoň nejaké znalosti v tejto oblasti činnosti.

Po druhé, musíte sa zoznámiť s jeho hlavným oknom, ktoré sa príliš nelíši od okna bežného editora. Rovnaké tlačidlá, rovnaké menu, telo dokumentu, záložky a stavové riadky. Súbor, ktorý vás zaujíma, môžete otvoriť prostredníctvom karty Súbor alebo pomocou špeciálneho tlačidla, ktoré sa nachádza v programe. Potom budete môcť vidieť spustiteľný súbor, ktorý sa zobrazí vo forme čísel a písmen. Nezamieňajte tie znaky, s ktorými je prezentovaný binárny súbor, a tie, ktoré má bežný editor. V prípade, že sa rozhodne vymazať alebo zmeniť ktorúkoľvek časť dokumentu, treba chápať, že ktorákoľvek jeho časť zmizne alebo sa zmení.

Po tretie, pomocou programu sa môžete pokúsiť zmeniť ktorúkoľvek časť dokumentu. Ako už bolo spomenuté, nástroj zobrazuje súbor spôsobom, ktorý zlepšuje spôsob, akým môžete nájsť požadovanú časť dokumentu. Program má navyše pomerne flexibilné nastavenie. Pomocou neho môžete zmeniť grafické zobrazenie binárneho kódu, ktorý má binárny súbor. V prípade, že sú do niektorej časti súboru zadané nesprávne údaje, môže následne buď úplne prestať fungovať, alebo začať fungovať nie celkom správne. V každom prípade zadanie takýchto údajov spôsobí zmeny ako v operačnom systéme, tak aj priamo v samotnom osobnom počítači.

Po štvrté, po zmene, odstránení alebo pridaní určitých údajov do súboru by ste si mali uložiť výsledok svojej práce. V prípade, že nemáte dostatočné skúsenosti s úpravou súborov, mali by ste byť pripravení na nie veľmi príjemné následky. Napríklad dokument môže prestať fungovať po zmene údajov. Kým nezačnete tomuto problému dobre rozumieť, veľa kópií súborov bude poškodených. Ak si nie ste istí svojimi schopnosťami, nemali by ste údaje meniť sami, najmä v situáciách, keď potrebujete opraviť binárny súbor su.

Vo vyššie uvedenom príklade je možnosť „b“ „najdlhšia“: vyžaduje 23 bajtov (21 bajtov pre reťazec a 2 bajty pre celé číslo). Možnosti „n“ a „m“ vyžadujú 4 a 5 bajtov (pozri tabuľku).

názov, položka vydavateľstva Variant časť

Binárne súbory

Binárne súbory uchovávajú informácie vo forme, v akej sú prezentované v pamäti počítača, a preto sú pre človeka nepohodlné. Pri pohľade na takýto súbor nie je možné pochopiť, čo je v ňom napísané; nedá sa to vytvoriť ani opraviť ručne - v nejakom textovom editore - a pod. Všetky tieto nepríjemnosti sú však kompenzované rýchlosťou práce s dátami.

Okrem toho, textové súbory sú sekvenčné prístupové štruktúry, zatiaľ čo binárne súbory sú priame. To znamená, že kedykoľvek môžete odkazovať na kohokoľvek, nielen na aktuálny prvok súboru .

Zadané súbory

Premenné štruktúrovaných dátových typov (iné ako reťazec) nie je možné čítať z textového súboru. Napríklad, ak potrebujete zadať údaje z textového súboru na vyplnenie záznamovej hračky informáciami o hračkách dostupných na predaj (názov produktu, cena produktu a vek, pre ktorý je hračka určená):

vek: sada 0..18; (definované v súbore hranicami)

potom musíte napísať nasledujúci kód:

c: char; i,j,min,max: celé číslo;

a: rad hračiek;

begin assign(f,input); reset(f);

pre i:=1 až 100 urob, ak nie, eof(f)

potom s a[i] do

begin readln(f,meno,cena,min,max); vek:=;

pre j:= min až max do vek:=vek+[j];

Ako vidíte, takéto čítanie po jednotlivých prvkoch je veľmi nepohodlné a časovo náročné.

Ponúka sa východisko z tejto situácie napísané súbory- ich prvky môžu byť akéhokoľvek základného alebo štruktúrovaného dátového typu. Jediným obmedzením je, že všetky prvky musia byť rovnakého typu. Táto zjavná nepríjemnosť je

nevyhnutná podmienka pre organizáciu priameho prístupu k prvkom binárneho súboru: ako v prípade polí, ak je dĺžka každého komponentu štruktúry presne známa, potom je možné adresu ľubovoľného komponentu vypočítať pomocou veľmi jednoduchého vzorca:

<начало_структуры> + <номер_компонента>*<длина_компонента>

Popis napísaných súborov

V sekcii var sú premenné súborov určené na prácu s napísané súbory sú opísané nasledovne:

var<файловая_перем>: súbor z<тип_элементов_файла>;

Žiadna premenná súboru nemôže byť nastavená na konštantu.

Účel typovaného súboru

Odteraz až do konca tejto časti „súbor“ znamená „ binárny typ súboru(Samozrejme, ak nie je uvedené inak).

Príkaz priradiť (f,"<имя_файла>"); slúži na vytvorenie spojenia medzi premennou súboru f a názvom súboru, za ktorý bude táto premenná zodpovedná.

riadok "<имя_файла>" môže obsahovať úplnú cestu k súboru. Ak cesta nie je zadaná, súbor sa považuje za umiestnený v rovnakom adresári ako spustiteľný modul programu.

Otváranie a zatváranie napísaného súboru

V závislosti od toho, aké akcie bude váš program vykonávať s otvoreným súborom, je možné ho otvoriť dvoma spôsobmi:

reset(f); - otvorenie súboru na čítanie informácií z neho a zároveň na zápis doň (ak taký súbor neexistuje, pokus o jeho otvorenie spôsobí chybu). Rovnaký príkaz vráti ukazovateľ na začiatok súboru;

prepis(f); - otvorenie súboru na zapisovanie informácií do neho; ak takýto súbor neexistuje, vytvorí sa; ak súbor s rovnakým názvom už existuje, všetky informácie v ňom obsiahnuté zmiznú.

zväčšenie napísané súbory postup close(f) spoločný pre všetky typy súborov.

Čítanie z napísaného súboru

Čítanie zo súboru otvoreného na čítanie sa vykonáva pomocou príkazu read(). V zátvorkách je najprv uvedený názov premennej súboru a potom vstupný zoznam1) :

Zo súboru je možné zadať len premenné zodpovedajúcej deklarácie typu, ale tento typ údajov môže byť aj štruktúrovaný. Povedzme, že ak sa vrátime k príkladu uvedenému na začiatku p." Zadané súbory“, bude zrejmé, že použitie napísaný súbor namiesto textu výrazne zredukuje text programu:

typ hračka = názov záznamu: reťazec; cena: skutočná;

vek: sada 0..18; (určené hranicami)

varf: súbor hračky;

a: rad hračiek; začať

priradit(f,vstup);

pre i:=1 až 100 do

ak nie eof(f) tak čítaj (f,a[i]); close(f);

Vyhľadajte v zadanom súbore

Už známa funkcia eof(f:file):boolean nám hovorí, že bol dosiahnutý koniec súboru. Všetky ostatné funkcie „hľadať koniec“ (eoln() , seekeof() a seekeoln() ), ktoré sú natívne pre textové súbory, nemožno použiť na zadané súbory.

Existujú však špeciálne podprogramy, ktoré vám umožňujú pracovať napísané súbory ako pri štruktúrach s priamym prístupom:

1. Funkcia filepos(f:file):longint oznámi aktuálnu polohu ukazovateľa v súbore f . Ak ukazuje na úplný koniec súboru obsahujúceho N prvkov, potom táto funkcia vráti N . To sa dá ľahko vysvetliť: prvky súboru sú číslované od nuly, takže posledný prvok má číslo N-1 . A číslo N tak patrí „neexistujúcemu“ prvku – znamienku konca súboru.

2. Funkcia veľkosť súboru(f:súbor):longint vypočíta dĺžku súboruf .

3. Procedúra seek(f:file,n:longint) posunie ukazovateľ v súbore f na začiatok záznamu číslo N . Ak sa ukáže, že n je väčšie ako skutočná dĺžka súboru, potom sa ukazovateľ presunie za skutočný koniec súboru.

4. Procedúra skrátiť (f:súbor) skráti „chvost“ súboru f: všetky prvky od aktuálneho súboru po koniec súboru budú z neho odstránené. V skutočnosti sa na miesto, kde ukázal ukazovateľ, prepíše iba znak „koniec súboru“ a fyzicky „odrezané“ hodnoty zostanú na svojich pôvodných miestach – jednoducho sa stanú „bez vlastníka“.

Zápis do napísaného súboru

Premenné môžete uložiť do zapisovateľného súboru pomocou príkazu write(). Rovnako ako pri čítaní, premenná súboru je uvedená ako prvá, potom nasleduje zoznam výstupov:

napis(f,a,b,c); - zápis do filef (predtým otvoreného na zápis príkazmi rewrite(f) alebo reset(f) ) premenných a , b , c .

výstup do napísaný súbor povolené sú len premenné zodpovedajúceho popisu dátového typu. Nepomenované a nezadané konštanty nemožno odvodiť

napísaný súbor.

Zadané súbory sa považujú za štruktúry priameho aj sekvenčného prístupu. To znamená, že zápis je možný nielen na úplný koniec súboru, ale aj na ktorýkoľvek z jeho ďalších prvkov. Zapísaná hodnota nahradí predchádzajúcu hodnotu v tomto prvku (stará hodnota bude "prepísaná").

Napríklad, ak chcete nahradiť piaty prvok súboru hodnotou uloženou v premennej a , napísali by ste nasledujúci útržok kódu:

hľadaj(f,5); (ukazovateľ bude nastavený na začiatok 5. prvku)

napis(f,a); (ukazovateľ bude nastavený na začiatok 6. prvku)

Práca s binárnymi súbormi

Všetky informácie sú uložené v počítači v tvare 0 a 1, teda v binárnej forme. Binárne súbory sa líšia od textových súborov iba spôsobom, akým sa s nimi zaobchádza. Ak napríklad do textového súboru zapíšeme číslo „4“, potom sa zapíše ako znak a na jeho uloženie je potrebný jeden bajt. Podľa toho sa veľkosť súboru bude rovnať jednému bajtu. Textový súbor obsahujúci záznam: „145687“ bude mať veľkosť šesť bajtov.

Ak do binárneho súboru zapíšeme celé číslo 145687, bude mať veľkosť štyri bajty, pretože toľko je potrebných na uloženie údajov typu int. To znamená, že binárne súbory sú kompaktnejšie a v niektorých prípadoch ľahšie spracovateľné.

Zápis štandardných dátových typov do binárnych súborov

Ak chcete otvoriť binárny súbor, musíte nastaviť režim prístupu na ios::binary (v niektorých kompilátoroch C++ ios::bin).

Ak chcete vytvoriť výstupný súbor, vytvorte objekt:

outstream outBinFile("out.bin", ios::out | ios::binary);

/* vytvorenie objektu triedy mimo prúdu von. kôš

ak (! out_f a 1) //štandardná kontrola

Dáta sa zapisujú pomocou metódy write (), ktorá má dva parametre: prvý je ukazovateľ na začiatok (začiatočná adresa) zapisovaných údajov, druhý je počet bajtov na zápis. V tomto prípade musí byť ukazovateľ explicitne prevedený na typ char.

Príklad 1 Zapíšte premenné rôznych typov do binárneho súboru:

outstream outBinFile("test.bin", ios::out I

ios: :binary); /^vytvor objekt triedy prúdu a pokúsiť sa ho prepojiť so súborom test. kôš v režime binárneho zápisu */

int a - 145687; //deklarácia celočíselnej premennej ale

outBinFile. napis ((char*) &a, sizeof(a)) ; /^zápis do súboru

premenlivý ale ako prúd bajtov, teda zápis internej reprezentácie celočíselnej premennej do súboru a */ float x - 123,25; // deklarácia skutočnej premennej X

outBinFile .write ((char*) &x, sizeof(x)) ; /^zápis do súboru

premenlivý X ako prúd bajtov, t.j. zápis internej reprezentácie celočíselnej premennej x*/ do súboru

//definícia znakovej premennej od a inicializácia pomocou g outBinFile.write((char*)&c, sizeof(c));

//zadanie postavy g vyplniť

outBinFile.close(); návrat 0;

Ak otvoríte obsah testovacieho súboru .bin pomocou textového editora, bude vyzerať takto:

a veľkosť súboru bude 9 bajtov.

Čítanie štandardných dátových typov z binárnych súborov

Ak chcete otvoriť existujúci binárny súbor na čítanie, musíte vytvoriť objekt:

ifstream inpBinFile("inp.bin", ios::in I ios::binary);

/* použite disjunkciu príznakov označujúcu, že súbor je otvorený na čítanie v binárnej forme */

if(!inpBinFile)

cout Na čítanie dát používame funkciu read(), ktorá má parametre podobné funkcii write().

#include using namespace std; int main()

ifstream inpBinFile("test.bin", ios::in I

ios: :binary); / / otvorte súbor na čítanie v binárnej forme

int a; plavák x; char c = "g";

inpBinFile.read((char*)&a, sizeof(a));

//čítanie celočíselnej premennej inpBinFile.read((char*)&x, sizeof(x));

//čítať skutočnú premennú inpBinFile.read((char*)&c, sizeof(c));

//prečítanie znakovej premennej

inpBinFile.close(); cout

Výsledok programu:

a = 145 687 x = 123,25 c = g

Upozorňujeme, že pri použití funkcií zápisu a čítania nedochádza k žiadnej konverzii informácií. Interná reprezentácia údajov sa zapisuje do súboru a číta sa zo súboru. Preto dva predchádzajúce programy poskytli správny výsledok.

Zápis a čítanie vlastných dátových typov do binárnych súborov

Na rozdiel od textových súborov sa práca s vlastnými typmi údajov pomocou binárnych súborov nelíši od štandardných typov údajov. Metódy write() a read() sa používajú podobne. Programátor potrebuje iba špecifikovať adresu pamäťovej oblasti, ktorá sa má zapísať, a počet zapisovaných bajtov, pričom berie do úvahy, že nedochádza k žiadnej konverzii dát, iba sa zapisuje a číta vnútorná reprezentácia informácií.

Pri práci s binárnymi súbormi možno použiť aj metódy seekg(), tellg(), seekp(), tellp().

Príklad 3 Napíšte program, ktorý zapíše informácie o skupine turistov do binárneho súboru.

fstream BinFile("ankety.bin", ios::in I ios::out | ios::binary);

Skupina dotazníkov = ; pre (int i = 0; i

BinFile.write((char*)&Gruppa[i], sizeof(Anketa)); BinFile.close(); návrat 0;

Príklad 4 Súbor "ankety.bin" obsahuje údaje o skupine turistov, je potrebné ich prečítať a zobraziť na obrazovke.

#include using namespace std; štruktúrna otázka (

charname; int vek;

štrukturálny dátový typ Dotazník na obrazovke*/

stream a operátor

fstream BinFile("ankety.bin", ios::in | ios::out | ios::binary); if (!BinFile)

pre (int i = 0; i

//okamžite prečíta všetky bajty obsadené premennou typu Anketa BinFile.read((char*)&Gruppa[i], sizeof(Anketa));

BinFile.close(); návrat 0;

Výsledok programu:

Ivanov, 23 rokov Sidorov, 21 Petrov, 22

Pre pokračovanie stlačte ľubovolnú klávesu. . .

Vývoj vlastných tried pre prácu so súbormi

Je nepohodlné neustále používať metódy zápisu () a čítania () a oveľa krajšie je, ak môžete používať operácie ">" analogicky s textovými súbormi. Uveďme príklad implementácie našej triedy pre prácu s binárnymi súbormi.

pomocou menného priestoru std;

struct Otázka //deklarovanie štruktúry na ukladanie informácií

/* preťaženie operácie vloženia do streamu na výstup vlastného

štrukturálny dátový typ Dotazník na obrazovke*/

stream a operátor

trieda outBinaryFile: public of stream /^definujeme našu triedu pre prácu s výstupnými binárnymi súbormi. Vygenerujeme ho z triedy pre prácu s výstupnými prúdmi súborov */

/* pri popise konštruktora vygenerovanej triedy nezabudnite zavolať konštruktor základnej triedy a odovzdajte mu potrebné parametre */

outBinaryFile(char* name) : ofstream(name, ios::out I ios::binary)

//preťaží potrebné operácie ako metódy triedy outBinaryFile& operátor

write((char*)&chislo, sizeof(chislo)); vrátiť *toto;

outBinaryFile& operátor

write((char*)&ank, sizeof(ank)); vrátiť *toto;

class inpBinaryFile: public if stream /* definujeme našu triedu pre prácu so vstupnými binárnymi súbormi. Vygenerujeme ho z triedy pre prácu s prúdmi vstupných súborov */

inpBinaryFile(char* name) : ifstream(name, ios::in I ios::binary)

/*zavolajte konštruktor základnej triedy s požadovanými parametrami,

dosť pre konštruktor odvodenej triedy */

//preťažiť potrebné operácie

inpBinaryFile& operátor >> (int& číslo)

read((char*)&chislo, sizeof(chislo)); vrátiť *toto;

inpBinaryFile& operátor >> (Anketa& ank)

read((char*)&ank, sizeof(ank)); vrátiť *toto;

int a = 111, b = 112; outBinaryFile outFile("dannye.bin");

// otvorenie súboru na čítanie

inpBinaryFile inpFile("dannye.bin"); if (!inpFile)

pre (int i = 0; i

inpFile >> a; //prečítaj si dotazník zo súboru

cout //a zobrazí sa na obrazovke

inpFile >> anketa; cout

Výsledok programu:

Kolja, 1990, 582-78-95.

Pre pokračovanie stlačte ľubovolnú klávesu. . .

1. Je možné použiť operáciu v programe?

ios::v I ios::out

  • a) áno, v každom prípade;
  • b) áno, ale len pri práci s textovými súbormi;
  • c) V každom prípade nie.
  • 2. Zadajte správnu možnosť otvorenia textového súboru na čítanie:
    • a) ifstream inpF("vstup.txt", ios::in);
    • b) ifstream inpF("vstup.txt", ios::vstup);
    • c) ifstream inpF(ios:in, "vstup.txt").

H. Čo sa zobrazí ako výsledok vykonania nasledujúceho kódu?

inputFile.get(c);

ďalej - inputFile.peek();

ak (ďalší == EOF)

  • a) obsah súboru spojeného s prúdom inputFile sa zobrazí raz;
  • b) obsah súboru spojeného s prúdom inputFile sa bude zobrazovať nekonečne veľakrát;
  • c) na obrazovke sa nič nezobrazí.
  • 4. Koľko znakov je v súbore?
  • 12 3 4 5 6
  • a) 6;
  • b) 7;
  • o 11.
  • 5. Aké metódy umožňujú určiť koniec súboru?
  • a) eof();
  • b) dobrý();
  • c) obe tieto metódy.
  • 6. Aký je účel funkcie getline()?
  • a) prečíta slovo zo súboru;
  • b) prečíta celý obsah spisu;
  • c) prečíta riadok zo súboru.
  • 7. Ak chcete zapisovať/čítať používateľom definované typy údajov do súboru, musíte:
    • a) preťaženie operácií ">>" a "
    • b) zapisovanie a čítanie užívateľom definovaných dátových typov je dostupné bez dodatočných akcií;
    • c) zapisovanie a čítanie užívateľom definovaných dátových typov do súboru nie je možné.
  • 8. Aké funkcie sa používajú na zápis/čítanie informácií v binárnej forme?
  • a) printf/scanf
  • b) písať / čítať;
  • c) dať / dostať.
  • 1. Napíšte program, ktorý zapíše do súboru písmená anglickej abecedy.
  • 2. Súbor input.txt obsahuje informácie z niekoľkých textových riadkov. Zobrazte obsah tohto súboru na obrazovke, spočítajte počet riadkov v súbore.
  • 3. Disk obsahuje súbor result.txt s výsledkami chemických pokusov. Napíšte program, ktorý vytvorí kópiu tohto súboru s názvom copy_resylt.txt.
  • 4. Pomocou klávesnice zadajte názov súboru. Odstráňte všetky párne riadky v zadanom súbore.
  • 5. Napíšte program, ktorý v textovom súbore nahradí všetky malé písmená veľkými písmenami a naopak.
  • 6. Zdrojový textový súbor obsahuje čísla oddelené medzerami. Vytvorte dva nové súbory: prvý by mal obsahovať iba párne čísla a druhý - nepárny.
  • 7. Súbor obsahuje reálne čísla. Napíšte program, ktorý odstráni zlomkovú časť týchto čísel a zapíše ich do nového súboru.
  • 8. Informácie o letoch leteckých spoločností sa zaznamenávajú do textového súboru. Vyberte si z týchto údajov lety s odletom popoludní a zobrazte ich na obrazovke.
  • 9. Preťažte operátory >> a
  • 10. Napíšte si vlastnú triedu pre prácu s binárnymi súbormi.
  • 11. Napíšte zoznam 10 študentov v triede do textového súboru a binárneho súboru. Porovnajte tieto súbory. Vysvetlite výsledný rozdiel.
  • 12. Vytvorte triedu, ktorá zapíše informácie o autách (rok výroby, značka, farba atď.) do textového súboru v súbore. V tomto prípade je každý symbol informácie nahradený jeho ABO 1-kódom. Zobrazte výsledný súbor na obrazovke.

testovacie otázky

  • 1. Aké triedy sa používajú na prácu so súborovými prúdmi?
  • 2. Aké režimy prístupu je možné použiť pri práci so súbormi? Uveďte príklady.
  • 3. Aká metóda sa používa na otvorenie súboru? Uveďte príklady.
  • 4. Aké operácie sú dostupné pre prácu so súbormi? Aké funkcie sú určené na vykonávanie týchto operácií?
  • 5. Aké metódy umožňujú určiť koniec súboru pri čítaní informácií z neho? Aký je rozdiel medzi týmito metódami? Uveďte príklady.
  • 6. Ako možno čítať premenné štandardných dátových typov z textových súborov?
  • 7. Je možné čítať premenné vlastných dátových typov z textových súborov?
  • 8. Aké funkcie sú určené na náhodné čítanie informácií zo súboru? Uveďte príklady.
  • 9. Vymenujte vlastnosti binárnych súborov. Aké sú výhody používania takýchto súborov?
  • 10. Aké funkcie možno použiť na zápis/čítanie informácií do binárnych súborov?
  • 11. Ako čítať premenné štandardných dátových typov z binárneho súboru?
  • 12. Aké sú úvahy pri čítaní vlastných dátových typov z binárnych súborov?
  • "Ivanov", 23), ("Sidorov", 21),

Popis a interná reprezentácia súborov

Súbory sú rôzne. Všetky súbory uložené v počítači majú špeciálne atribúty, t.j. špeciálne metódy popisu, ktoré umožňujú rozlíšiť jeden súbor od druhého: 1) názov; veľkosť 2; 3) dátum a čas; 4) ikona.

Každý súbor má názov – názov súboru. Názov súboru popisuje jeho obsah alebo naznačuje, na čo môže byť použitý. Názov sa priradí súboru pri jeho vytvorení. Toto platí pre všetky súbory.

Každý súbor má fyzickú veľkosť. Súbor zaberá časť pamäte počítača a miesto na disku.

Keď je súbor vytvorený, operačný systém ho opečiatkuje dátumom a časom vytvorenia. To vám umožní triediť súbory podľa dátumu a času, a tak vyčistiť počítač. Zaznamená sa aj dátum a čas aktualizácie alebo úpravy súboru.

Každý súbor je špecifického typu, ktorý úzko súvisí s ikonou súboru, ktorú vidíme. Typ súboru závisí od jeho obsahu. Každý program priradí vygenerovanému dokumentu špecifický typ a zodpovedajúcu ikonu.

Veľkosť súboru sa meria v bajtoch, rovnako ako veľkosť pamäte.

Veľkosť súboru môže byť 0 bajtov, čo znamená, že súbor existuje, ale sám o sebe nič neobsahuje. S Maximálna veľkosť súboru je 4 GB. Takéto obrovské súbory sú však veľmi zriedkavé.

Zabudované hodiny počítača sú potrebné najmä na priradenie času a dátumu vytvorenia k súborom. To vysvetľuje, aké dôležité je správne nastaviť tieto hodiny. Existujú ďalšie atribúty na popis súborov, ako sú systémové súbory, skryté súbory, súbory len na čítanie, archívne súbory atď. Operačný systém si s tým poradí sám.

Každý súbor má jedinečný index. Index obsahuje informácie, ktoré každý proces potrebuje na prístup k súboru. Spracuje prístupové súbory pomocou dobre definovanej sady systémových volaní a identifikuje súbor pomocou znakového reťazca, ktorý funguje ako názov cesty k súboru. Každý názov zlúčeniny jedinečne identifikuje súbor, takže jadro preloží názov do indexu súboru. Index obsahuje tabuľku adries umiestnenia informácií o súbore na disku. Keďže každý blok na disku je adresovaný svojim číslom, táto tabuľka obsahuje kolekciu čísel diskových blokov. Pre väčšiu flexibilitu pripája jadro k súboru jeden blok po druhom, čo umožňuje, aby boli informácie o súbore rozptýlené po celom súborovom systéme. Takéto rozloženie však komplikuje úlohu hľadania údajov. Tabuľka adries obsahuje zoznam čísel blokov obsahujúcich informácie, ktoré patria k súboru, ale jednoduché výpočty ukazujú, že lineárny zoznam blokov súborov v indexe je ťažké spravovať. Aby mohla štruktúra malého indexu pracovať s veľkými súbormi, tabuľka adries blokov disku sa zosúladí so štruktúrou.

Textové a binárne súbory

Súbory umožňujú používateľovi čítať veľké množstvo údajov priamo z disku bez toho, aby ich zadával z klávesnice. Existujú dva hlavné typy súborov: textové a binárne.

Text sa nazývajú súbory pozostávajúce z ľubovoľných znakov. Sú usporiadané do riadkov, z ktorých každý končí znakom " koniec riadku". Koniec samotného súboru je označený symbolom " koniec súboru". Pri zapisovaní informácií do textového súboru, ktorý je možné zobraziť pomocou ľubovoľného textového editora, sa všetky údaje skonvertujú na typ znaku a uložia sa vo forme znakov.

binárne X súbory informácie sa čítajú a zapisujú vo forme blokov určitej veľkosti, ktoré môžu uchovávať údaje akéhokoľvek druhu a štruktúry.

Na prácu so súbormi sa používajú špeciálne dátové typy, tzv tokov. Prúd ifstream sa používa na prácu so súbormi v režime čítania a prúd ifstream v režime zápisu. Na prácu so súbormi v režime zápisu aj čítania sa používa stream ifstream.

V programoch C++ je pri práci s textovými súbormi potrebné zahrnúť knižnice ifstream a iostream.

Ak chcete zapisovať údaje do textového súboru, musíte: 1) opísať premennú typu mimo prúdu otvorené; 3) výstup informácií do súboru; 4) nezabudnite súbor zatvoriť.

Ak chcete čítať údaje z textového súboru, musíte:

1) opísať premennú typu ifstream; 2) otvorte súbor pomocou funkcie otvorené; 3) čítať informácie zo súboru, pri čítaní každej časti údajov je potrebné skontrolovať, či sa dosiahol koniec súboru; 4) zatvorte súbor.

Treba poznamenať, že vo všetkých vyššie diskutovaných príkladoch funkcia fopen() v režimoch „r“ a „w“ otvára textový súbor na čítanie a zápis. To znamená, že niektoré znaky formátovania textu, ako napríklad znak návratu vozíka '\r', nemožno prečítať ako samostatné znaky, bez ohľadu na to, ako v súbore existujú, ale sú tam. Toto je funkcia režimu textového súboru. Pre „jemnejšiu“ prácu s obsahom súborov je tu binárny režim, ktorý predstavuje obsah súboru ako postupnosť bajtov, kde všetky možné riadiace kódy sú len čísla. Práve v tomto režime je možné odstrániť alebo pridať riadiace znaky, ktoré nie sú dostupné v textovom režime. Na otvorenie súboru v binárnom režime sa na čítanie a zápis používa aj funkcia fopen() s posledným parametrom rovným „rb“ a „wb“.