Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Siguria
  • Çfarë vërehet gjatë shikimit të skedarëve binare. Si të përditësoni një skedar binar SU në Android - rivendosni aksesin rrënjë për aplikacionin SuperSu

Çfarë vërehet gjatë shikimit të skedarëve binare. Si të përditësoni një skedar binar SU në Android - rivendosni aksesin rrënjë për aplikacionin SuperSu

Një skedar binar është çdo skedar në kompjuterin tuaj. Të gjitha informacionet në një kompjuter dhe mediat e lidhura me të regjistrohen në bit (prandaj emri). Sidoqoftë, për krahasim, një skedar teksti mund të lexohet në lexues që korrespondojnë me shtesën (ato më të thjeshtat - madje edhe në Notepad), por një skedar i ekzekutueshëm nuk mundet. Dhe megjithëse në fakt skedari txt është i njëjti skedar binar, por kur ata flasin për problemin e hapjes së përmbajtjes së skedarëve binare, ata nënkuptojnë skedarë të ekzekutueshëm, si dhe të dhëna të kompresuara.

Do t'ju duhet

Udhëzim

  • Shkarkoni programin Hex Edit në hard diskun - një redaktues skedari që përfaqëson përmbajtjen e tyre në formë binare. Hapni programin duke klikuar dy herë në skedarin fillestar. E dhënë software ju lejon të lexoni skedarë binare në kohë reale, të ndryshoni përmbajtjen, të shtoni tuajin të dhënat e veta edhe me shume. Për të punuar plotësisht në këtë mjedis, duhet të dini pak rreth konceptet e përgjithshme skedarë binare.
  • Dritarja e programit nuk është shumë e ndryshme nga një redaktues i zakonshëm: menutë e njohura dhe një panel me butona, trupi i skedarit që redaktohet, faqeshënuesit dhe shiriti i statusit. hapur skedar binar nëpërmjet menysë File ose duke klikuar në ikonën përkatëse në panel. Skedari binar do të shfaqet para jush në formën e vargjeve me numra dhe shkronja. Mos i ngatërroni këto karaktere me të dhënat e printuara. skedarët e tekstit. Ato gjithashtu mund të redaktohen duke fshirë karaktere, megjithatë, duke bërë këtë, ju do të fshini qelizat me të dhëna, pjesë të skedarit.
  • Bëni ndryshime në përmbajtjen e skedarit. Aplikacioni mund të tregojë pjesë të rëndësishme të skedarit për më shumë kërkim i përshtatshëm dhe gjithashtu ka konfigurim fleksibël shfaqja grafik kodi binar. Kalo pamjen e përmbajtjes në modalitetin ASCII+IBM/OEM për të parë kod programimi dosje. Nëse futni rreshta të gabuar në skedar, ai mund të mos funksionojë siç duhet, duke shkaktuar pasoja të rënda për sistemi operativ Kompjuter personal.
  • Ruani ndryshimet tuaja. Nëse nuk keni përvojë në këtë lloj redaktimi skedari, përgatituni për faktin që skedari nuk do të hapet dhe refuzoni të funksionojë pasi të keni bërë ndryshime. Me shumë mundësi do të ngatërroni disa kopje përpara se ta bëni siç duhet. Mundohuni të mos i ruani të gjitha ndryshimet në skedari origjinal për të mbajtur përmbajtjen e saj të pandryshuar.
  • regjistrime ), atëherë është mjaft e kuptueshme të dëshironi të zvogëloni disi sasinë e memories të papërdorur, por të zënë.

    Për raste të tilla, ka hyrjet me një pjesë variant.

    Regjistro përshkrimin me pjesë variant

    Në seksionin var shënim me një pjesë variant përshkruaje kështu:

    var<имя_записи>: rekord<поле1>: <тип1>; [<поле2>: <тип2>;] [...] rast<поле_переключатель>: <тип>e<варианты1>: (<поле3>: <тип3>; <поле4>: <тип4>; ...); <варианты2>: (<поле5>: <тип5>; <поле6>: <тип6>; ...); [...] fundi;

    Pjesë jo variante të dhënat (deri në fjalë kyçe rasti ) ndjek të njëjtat rregulla si shënim normal. Në përgjithësi, pjesa jovariante mund të mungojë plotësisht.

    Pjesa variant fillon me fjalën e rezervuar të rastit , pas së cilës tregohet fusha e regjistrimit, e cila më vonë do të shërbejë si ndërprerës. Ashtu si me një deklaratë normale të rastit, ndërprerësi duhet t'i përkasë njërit prej llojet e numëruara të dhëna (shih leksionin 3). Lista e zgjedhjeve mund të jetë një konstante, një interval ose bashkim i disa konstantave ose vargjeve. Seti i fushave që duhet të përfshihen në strukturën e regjistrimit nëse opsioni përkatës është ekzekutuar është i mbyllur në kllapa.

    Shembull. Për të përshkruar përmbajtjen e bibliotekës, kërkohet informacioni i mëposhtëm:

    Kolonat "Titulli" dhe "Botuesi" janë të zakonshme për të tre opsionet, dhe fushat e mbetura varen nga lloji i publikimit. Për të zbatuar këtë strukturë, ne përdorim shënim me një pjesë variant:

    tipi biblio = emri i regjistrimit, botuesi: varg; zëri i rastit: shkronja e "b": (autor: varg; viti: 0..2004); "n": (të dhënat: data); "m": (viti: 1700..2004; muaji: 1..12; numri: numër i plotë); fundi;

    Në varësi të vlerës së fushës së artikullit, regjistrimi do të përmbajë ose 4, ose 5, ose 6 fusha.

    Mekanizmi i përdorimit të një rekordi me një pjesë variant

    Numri i bajteve të alokuara nga përpiluesi për shënim me një pjesë variant, përcaktohet nga varianti më i gjatë i tij. Kompletet e fushave "më të shkurtra" nga opsionet e tjera zënë vetëm një pjesë të memories së alokuar.

    Në shembullin e mësipërm, opsioni "b" është "më i gjati": kërkon 23 bajt (21 bajt për një varg dhe 2 bajt për një numër të plotë). Opsionet "n" dhe "m" kërkojnë përkatësisht 4 dhe 5 bajt (shih tabelën).

    emri, botuesi artikull Pjesa variant
    ... "b" autor vit
    ... "n" të dhëna
    ... "m" vit muaj numri
    ... "b" autor vit

    Binarët

    Skedarët binare ruajnë informacionin në formën në të cilën paraqitet në memorien e kompjuterit, dhe për këtë arsye janë të papërshtatshëm për njerëzit. Duke parë një skedar të tillë, është e pamundur të kuptosh se çfarë shkruhet në të; nuk mund të krijohet ose korrigjohet manualisht - në ndonjë redaktues teksti - e kështu me radhë. Sidoqoftë, të gjitha këto shqetësime kompensohen nga shpejtësia e punës me të dhënat.

    Gjithashtu, skedarët e tekstit janë struktura akses sekuencial, dhe binare - direkte. Kjo do të thotë që në çdo kohë mund t'i referoheni kujtdo, jo vetëm elementit aktual.

    Puna me skedarë binare

    I gjithë informacioni ruhet në kompjuter në formën e 0 dhe 1, pra në formë binare. Skedarët binare ndryshojnë nga skedarët e tekstit vetëm në mënyrën e trajtimit të tyre. Për shembull, nëse shkruajmë numrin "4" në një skedar teksti, atëherë ai shkruhet si karakter dhe nevojitet një bajt për ta ruajtur atë. Prandaj, madhësia e skedarit do të jetë e barabartë me një bajt. Skedari i tekstit që përmban hyrjen: "145687" do të jetë në madhësi gjashtë bajt.

    Nëse shkruajmë numrin e plotë 145687 në një skedar binar, atëherë ai do të ketë një madhësi prej katër bajtësh, pasi kaq nevojitet për të ruajtur të dhënat e llojit int. Kjo do të thotë, binarët janë më kompakt dhe, në disa raste, më të lehta për t'u përpunuar.

    Regjistrimi lloje standarde të dhënat në skedarë binare

    Për të hapur një skedar binar, duhet të vendosni modalitetin e aksesit në ios::binary (në disa përpilues C++, ios::bin).

    Për të krijuar një skedar dalës, krijoni një objekt:

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

    /* krijimi i një objekti të klasës jashtë rrjedhës jashtë. kosh

    nëse (! out_f dhe 1) //kontroll standard

    Të dhënat shkruhen duke përdorur metodën e shkrimit (), e cila ka dy parametra: i pari është një tregues në fillim (adresa e fillimit) të të dhënave që shkruhet, i dyti është numri i bajteve për t'u shkruar. Në këtë rast, treguesi duhet të konvertohet në mënyrë eksplicite në llojin char.

    Shembulli 1 Shkruani variabla të llojeve të ndryshme në një skedar binar:

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

    ios: :binary); /^krijoni objektin e klasës të përroit dhe duke u përpjekur ta lidhni atë me një skedar provë. kosh në modalitetin e shkrimit binar */

    int a - 145687; //deklarimi i një variabli të plotë por

    outBinFile. shkruani ((char*) &a, sizeof(a)); /^ shkruani në skedar

    e ndryshueshme por si një rrjedhë bajtësh, d.m.th. duke shkruar në një skedar paraqitjen e brendshme të një ndryshoreje të plotë a */ float x - 123,25; // deklarimi i ndryshores reale X

    outBinFile .write ((char*) &x, sizeof(x)) ; /^ shkruani në skedar

    e ndryshueshme X si një rrjedhë bajtësh, d.m.th. duke shkruar në një skedar paraqitjen e brendshme të një ndryshoreje të plotë x*/

    //përkufizimi i ndryshores së karakterit nga dhe duke e inicializuar me g outBinFile.write((char*)&c, sizeof(c));

    //hyrja e personazheve g për të paraqitur

    outBinFile.close(); kthimi 0;

    Nëse hapni përmbajtjen e skedarit test .bin me një redaktues teksti, do të duket kështu:

    dhe madhësia e skedarit do të jetë 9 bajt.

    Leximi i llojeve standarde të të dhënave nga skedarët binare

    Për të hapur një skedar binar ekzistues për lexim, duhet të krijoni një objekt:

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

    /* përdorni një ndarje të flamujve që tregon se skedari është hapur për lexim në formë binare */

    if (!inpBinFile)

    cout Për të lexuar të dhënat, përdorim funksionin read(), i cili ka parametra të ngjashëm me funksionin write().

    #include using namespace std; int main()

    ifstream inpBinFile("test.bin", ios::në I

    ios: :binary); / / hapni skedarin për lexim në formë binare

    int a; noton x; char c = "g";

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

    //lexo variablin integer inpBinFile.read((char*)&x, sizeof(x));

    //lexo ndryshoren reale inpBinFile.read((char*)&c, sizeof(c));

    //lexo variablin e karakterit

    inpBinFile.close(); cout

    Rezultati i programit:

    a = 145687 x = 123,25 c = g

    Vini re se kur përdorni funksionet e shkrimit dhe leximit, nuk bëhet asnjë konvertim i informacionit. Paraqitja e brendshme e të dhënave shkruhet dhe lexohet nga skedari. Kjo është arsyeja pse dy programet e mëparshme dha rezultatin e duhur.

    Shkrimi dhe lexim llojet me porosi të dhënat në skedarë binare

    Ndryshe nga skedarët e tekstit, puna me lloje të personalizuara të të dhënave duke përdorur skedarë binare nuk ndryshon nga llojet standarde të të dhënave. Metodat write() dhe read() përdoren në mënyrë të ngjashme. Programuesi duhet vetëm të specifikojë adresën e zonës së memories që do të shkruhet dhe numrin e bajteve që do të shkruhet, duke marrë parasysh që nuk ndodh konvertim i të dhënave, vetëm shkruhet dhe lexohet paraqitja e brendshme e informacionit.

    Gjithashtu, kur punoni me skedarë binare, mund të përdoren metodat seekg(), tellg(), seekp(), tellp().

    Shembulli 3 Shkruani një program që shkruan informacion për një grup turistësh në një skedar binar.

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

    Grupi i pyetësorit = ; për (int i = 0; i

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

    Shembulli 4 Skedari "ankety.bin" përmban të dhëna për një grup turistësh, është e nevojshme t'i lexoni dhe t'i shfaqni në ekran.

    #include using namespace std; Pyetja e strukturës (

    emër emri; mosha int;

    lloji i të dhënave strukturore Pyetësor në ekran*/

    stream & operator

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

    për (int i = 0; i

    //lexoni menjëherë të gjitha bajtet e zëna variabël tip Anketa BinFile.read((char*)&Gruppa[i], sizeof(Anketa));

    BinFile.close(); kthimi 0;

    Rezultati i programit:

    Ivanov, 23 Sidorov, 21 Petrov, 22

    Shtypni çdo tast për të vazhduar. . .

    Zhvillimi i klasave tuaja për të punuar me skedarë

    Është e papërshtatshme të përdorësh metodat shkrim() dhe read() gjatë gjithë kohës, është shumë më mirë të jesh në gjendje të përdorësh operacionet ">" në analogji me skedarët e tekstit. Le të japim një shembull të zbatimit të klasës sonë për të punuar me skedarë binare.

    duke përdorur hapësirën e emrave std;

    struct Pyetje //deklarimi i një strukture për ruajtjen e informacionit

    /* mbingarkimi i operacionit të futjes në transmetim për të nxjerrë një porosi

    lloji i të dhënave strukturore Pyetësor në ekran*/

    stream & operator

    klasa outBinaryFile: publike e stream /^ne përcaktojmë klasën tonë për të punuar me skedarë binare dalëse. Ne e gjenerojmë atë nga klasa për të punuar me rrjedhat e skedarëve dalës */

    /* kur përshkruani konstruktorin e klasës së gjeneruar, mos harroni të thërrisni konstruktorin e klasës bazë, duke i kaluar parametrat e nevojshëm në të */

    outBinaryFile(char* emri) : ofstream(emri, ios::out Ios::binary)

    //ringarkoj operacionet e nevojshme si metodat e klasës Operatori outBinaryFile&

    shkruani((char*)&chislo, sizeof(chislo)); ktheje *this;

    Operatori outBinaryFile&

    shkruani((char*)&ank, sizeof(ank)); ktheje *this;

    klasi inpBinaryFile: publik nëse transmetohet /* ne përcaktojmë klasën tonë për të punuar me skedarë binare hyrëse. Ne e gjenerojmë atë nga klasa për të punuar me rrjedhat e skedarëve hyrës */

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

    /* thirrni konstruktorin e klasës bazë me parametrat e kërkuar,

    mjafton për konstruktorin e klasës së prejardhur */

    //mbingarkojnë operacionet e nevojshme

    inpBinaryFile& operatori >> (int&numri)

    read((char*)&chislo, sizeof(chislo)); ktheje *this;

    operatori inpBinaryFile& >> (Anketa& ank)

    read((char*)&ank, sizeof(ank)); ktheje *this;

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

    // hapni skedarin për lexim

    inpBinaryFile inpFile("dannye.bin"); nëse (!inpFile)

    për (int i = 0; i

    inpFile >> a; //lexoni pyetësorin nga skedari

    cout //dhe shfaq atë në ekran

    inpFile >> anketa; cout

    Rezultati i programit:

    Kolya, 1990, 582-78-95.

    Shtypni çdo tast për të vazhduar. . .

    1. A është e mundur të përdoret operacioni në program?

    ios::në Unë ios::jashtë

    • a) po, në çdo rast;
    • b) po, por vetëm kur punoni me skedarë teksti;
    • c) Jo, gjithsesi.
    • 2. Specifikoni opsionin e duhur për hapjen e një skedari teksti për lexim:
      • a) ifstream inpF ("input.txt", ios::in);
      • b) ifstream inpF("input.txt", ios::input);
      • c) ifstream inpF(ios:in, "input.txt").

    H. Çfarë do të shfaqet si rezultat i ekzekutimit të kodit të mëposhtëm?

    inputFile.get(c);

    tjetër - inputFile.peek();

    nëse (tjetër == EOF)

    • a) përmbajtja e skedarit të lidhur me inputFile stream do të shfaqet një herë;
    • b) në ekran do të shfaqet përmbajtja e skedarit të lidhur me inputFile stream numër i pafund një herë;
    • c) asgjë nuk do të shfaqet në ekran.
    • 4. Sa karaktere janë në dosje?
    • 12 3 4 5 6
    • a) 6;
    • b) 7;
    • në 11.
    • 5. Cilat metoda ju lejojnë të përcaktoni fundin e një skedari?
    • a) eof();
    • b) mirë ();
    • c) të dyja këto metoda.
    • 6. Cili është qëllimi i funksionit getline()?
    • a) lexon një fjalë nga një skedar;
    • b) lexon të gjithë përmbajtjen e dosjes;
    • c) lexon një rresht nga një skedar.
    • 7. Për të shkruar/lexuar llojet e të dhënave të përcaktuara nga përdoruesi në një skedar, duhet:
      • a) mbingarkoni operacionet ">>" dhe "
      • b) shkrimi dhe leximi i llojeve të të dhënave të përcaktuara nga përdoruesi janë të disponueshëm pa veprime shtesë;
      • c) shkrimi dhe leximi i llojeve të të dhënave të përcaktuara nga përdoruesi në një skedar nuk është i mundur.
    • 8. Cilat funksione përdoren për të shkruar/lexuar informacionin në formë binare?
    • a) printf/scanf
    • b) shkruaj/lexo;
    • c) vendos / merr.
    • 1. Shkruani një program që shkruan shkronjat e alfabetit anglez në një skedar.
    • 2. Skedari input.txt përmban informacion nga disa vargjet e tekstit. Shfaqni përmbajtjen e këtij skedari në ekran, numëroni numrin e rreshtave në skedar.
    • 3. Disku përmban skedarin result.txt me rezultatet e eksperimenteve kimike. Shkruani një program që krijon një kopje të këtij skedari të quajtur copy_resylt.txt.
    • 4. Përdorni tastierën për të futur një emër skedari. NË skedari i specifikuar hiqni të gjitha linjat e njëtrajtshme.
    • 5. Shkruani një program që, në një skedar teksti, zëvendëson gjithçka shkronja të vogla shkronjat e mëdha dhe anasjelltas.
    • 6. Skedari i tekstit burim përmban numra të ndarë me hapësira. Gjeneroni dy skedarë të rinj: i pari duhet të përmbajë vetëm numra çift, dhe i dyti - tek.
    • 7. Skedari përmban numra realë. Shkruani një program që hedh poshtë pjesë thyesore këta numra dhe i shkruan në një skedar të ri.
    • 8. Informacioni për fluturimet e linjave ajrore regjistrohet në një skedar teksti. Zgjidhni nga këto të dhëna fluturimet që nisen pasdite dhe shfaqini ato në ekran.
    • 9. Mbingarkoni operatorët >> dhe
    • 10. Shkruani klasën tuaj për të punuar me skedarë binare.
    • 11. Shkruani një listë me 10 nxënës në një klasë në një skedar teksti dhe një skedar binar. Krahasoni këto skedarë. Shpjegoni ndryshimin që rezulton.
    • 12. Zhvilloni një klasë që shkruan informacione për makinat (viti i prodhimit, marka, ngjyra, etj.) në një skedar teksti në një skedar. Në këtë rast, çdo simbol informacioni zëvendësohet me kodin e tij ABO 1. Shfaqni skedarin që rezulton në ekran.

    pyetjet e testit

    • 1. Cilat klasa përdoren për të punuar me transmetimet e skedarëve?
    • 2. Cilat mënyra aksesi mund të përdoren kur punoni me skedarë? Jep shembuj.
    • 3. Cila metodë përdoret për të hapur një skedar? Jep shembuj.
    • 4. Cilat operacione janë të disponueshme për të punuar me skedarë? Cilat funksione janë krijuar për të kryer këto operacione?
    • 5. Cilat metoda ju lejojnë të përcaktoni fundin e një skedari kur lexoni informacion nga ai? Cili është ndryshimi midis këtyre metodave? Jep shembuj.
    • 6. Si mund të lexohen variablat e llojeve standarde të të dhënave nga skedarët e tekstit?
    • 7. A është e mundur të lexohen variabla të llojeve të personalizuara të të dhënave nga skedarët e tekstit?
    • 8. Për cilat veçori janë të destinuara lexim rastësor informacion nga një skedar? Jep shembuj.
    • 9. Emërtoni veçoritë e skedarëve binare. Cilat janë përfitimet e përdorimit të skedarëve të tillë?
    • 10. Cilat funksione mund të përdoren për të shkruar/lexuar informacion në skedarë binare?
    • 11. Si të lexohen variablat e llojeve standarde të të dhënave nga një skedar binar?
    • 12. Cilat janë konsideratat gjatë leximit të llojeve të personalizuara të të dhënave nga skedarët binare?
    • "Ivanov", 23), ("Sidorov", 21),

    Shembujt që kemi shqyrtuar deri më tani kanë demonstruar hyrje/dalje të formatuar të informacionit në skedarë. Hyrja/dalja e skedarëve të formatuar të numrave duhet të përdoret vetëm nëse janë të vegjël dhe të vegjël, dhe gjithashtu nëse është e nevojshme të sigurohet aftësia për të parë skedarët pa mjete softuerike. Përndryshe, natyrisht, është shumë më efikas të përdoret I/O binare, e cila ruan numrat në të njëjtën mënyrë si në RAM-in e kompjuterit, dhe jo si vargje karakteresh. Më lejoni t'ju kujtoj se një vlerë e plotë (int) ose reale (float) zë 4 bajt në memorie, vlera shkruani dyfishështë 8 bajt dhe vlera e karakterit të tipit char është 1 bajt. Për shembull, numri 12345 në një skedar teksti (të formatuar) merr 5 bajt, dhe në një skedar binar merr 4 bajt.

    Binarët, d.m.th. skedarët në të cilët informacioni ruhet në një formë të brendshme përfaqësimi përdoren për përdorim të mëvonshëm nga mjetet softuerike; ato nuk mund të shihen nga mjete jo softuerike. Avantazhi i skedarëve binare është se, së pari, gjatë leximit / shkrimit, nuk humbet kohë duke konvertuar të dhënat nga një formë e paraqitjes simbolike në një të brendshme dhe anasjelltas, dhe së dyti, nuk ka humbje të saktësisë së numrave realë. Si në rastin e hyrje/daljes së formatuar ashtu edhe në rastin e hyrje/daljes binare, për përpunimin "korrekt" të informacionit nga një skedar, është e nevojshme të dihet se çfarë lloje të dhënash, si dhe në çfarë sekuence shkruhen në një skedar. skedar binar, veçanërisht pasi shikoni një skedar binar duke përdorur redaktori i tekstit nuk do të japë asgjë.

    Le të shqyrtojmë një shembull që demonstron shkrimin e elementeve me numër të plotë të një grupi dinamik në një skedar binar dhe leximin e tyre nga ky skedar.

    #përfshi

    #përfshi

    #përfshi

    duke përdorur hapësirën e emrave std;

    cout<< "Vvedite kol-vo elementov celochisl. massiva: "; cin >>N;

    int *mas = i ri int[N];

    për (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);//krijoj. jashtë. rrymë binare

    nëse(!fout) ( cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }

    fout.shkruaj(riinterpret_cast (mas), N*madhësia e (int));//shkruaj një grup në skedar

    fout.close();//mbyllja e rrymës

    cout<< "Dannye uspeshno zapisany!" << endl;

    për (i=0; i

    ifstream fin("c:\\os\\bin.dat", ios::binary); //krijoni një transmetim për të lexuar skedarin

    nëse(!fin) (cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }

    cout<< "Fail sodergit:" << endl;

    fin.lexo(riinterpret_cast (mas), N*madhësia e (int));//lexo grupin nga skedari

    për (i=0; i

    getch(); kthimi 0;

    Vëmendje e veçantë në këtë program duhet t'i kushtohet përdorimit të funksioneve të shkrimit () (metodës të klasës së rrjedhës) dhe read() (metoda e klasës ifstream). Këto funksione mendojnë për të dhënat në terma bajte dhe janë krijuar për të transferuar një numër të caktuar bajtësh nga buferi i të dhënave në skedar dhe mbrapa. Parametrat e këtyre funksioneve janë adresa e buferit dhe gjatësia e tij në bajt.

    Funksioni write() është krijuar për të shkruar në skedar numrin e bajteve të specifikuara në parametrin e dytë nga numri i specifikuar në parametrin e parë. adresat buffer i të dhënave dhe funksioni read() është projektuar për të lexuar të dhëna nga një skedar. Duhet të theksohet këtu se këto funksione funksionojnë vetëm me një buffer të të dhënave të tipit char. Në këtë drejtim, në këtë program kemi përdorur operatorin reinterpret_cast<> , i cili konverton buferin tonë të të dhënave të tipit int (mas) në një buffer të tipit char.

    Duhet mbajtur mend se lloji i hedhjes duke përdorur operatorin reinterpret_cast e nevojshme vetëm në rastet kur parametri i parë i funksioneve shkruaj() Dhe lexo () nuk është një grup karakteresh (sepse një karakter i tipit karakter zë vetëm 1 bajt). Për më tepër, nëse duhet të shkruani ose lexoni jo një grup, por variabla individuale, atëherë duhet të përdorni mekanizmin e referencës (referenca në adresën e tamponit të të dhënave), për shembull:

    ofstream fout(emri i skedarit, ios::app | ios::binary);

    fout.shkruaj(riinterpret_cast (& cb), madhësia (float));

    Tani është e nevojshme të diskutohet parametri i dytë i funksioneve të konsideruara. Në këtë program si parametër të dytë kemi përdorur shprehjen N * sizeof (int), me të cilën kemi llogaritur numrin e bajteve. Për shembull, nëse kemi 5 elementë të grupit të plotë, atëherë numri i bajteve do të jetë 20. Funksioni sizeof() kthen numrin e bajteve të alokuara për llojin e të dhënave të specifikuar si parametër. Për shembull, madhësia e ( ndër) do të kthehet 4.

    Pra, programi i dhënë në këtë shembull ju lejon të shkruani të dhëna në formë binare në skedarin bin.dat dhe t'i lexoni ato nga ky skedar binar. Për më tepër, pas leximit, këto të dhëna konvertohen në llojin int, fitojnë strukturën e një grupi dhe çdo operacion mund të kryhet me to.

    Tani, imagjinoni që ju duhet të shkruani një program që ju lejon të lexoni të dhëna nga skedari bin.dat, dhe ne e dimë vetëm se ky skedar përmban elemente të një grupi të plotë në formë binare. Numri i elementeve të regjistruar ( N ) ne nuk e dimë. Kur krijojmë një program, ne nuk kemi të drejtë të përdorim një grup konstant, d.m.th. caktoni memorie për të në fazën e krijimit të programit. Kjo do të japë një rezultat të gabuar. Meqenëse një vlerë shumë e vogël e N do të çojë në faktin që jo të gjithë elementët e grupit merren parasysh, dhe një vlerë shumë e madhe e N do të çojë në mbushjen e qelizave shtesë me vlera të rastësishme.

    Konsideroni një shembull të një programi që ju lejon të lexoni elementë të një grupi të plotë nga një skedar binar duke shpërndarë në mënyrë dinamike memorie, dhe për të vërtetuar realizmin e të dhënave të lexuara, llogaritni shumën e tyre.

    #përfshi

    #përfshi

    #përfshi

    duke përdorur hapësirën e emrave std;

    int N, i, shuma=0, dfb; //dfb - gjatësia e skedarit në bajt

    ifstream fin("c:\\os\\bin.dat", ios::binare);

    nëse(!fin) (cout<< "Oshibka otkrytiya faila!"; getch(); return 1; }

    fin.seek(0, ios::fund);//vendos pozicionin e leximit në fund të skedarit (nga fundi i 0 bajt)

    dfb = fin.tellg();//merr fundin e vlerës së pozicionit të skedarit (në bajt)

    N=dfb/4;//duke ditur që një numër i plotë merr 4 bajt, ne llogarisim numrin e numrave

    int *arr = i ri int[N];// krijoni një grup dinamik

    fin.seekg(0, ios::beg);//para se të lexoni të dhënat, zhvendoseni pozicionin aktual në fillim të skedarit

    fin.lexo(riinterpret_cast (arr), dfb);

    cout<< "Iz faila schitano " << N << " elementov:" << endl;

    për (i=0; i

    për (i=0; i

    cout<< "\n Ih summa = " << sum;

    getch(); kthimi 0;

    Le t'i hedhim një vështrim më të afërt këtij programi, në të cilin kemi përdorur në mënyrë aktive funksionet seekg() dhe tellg(), të cilat janë metoda të klasës ifstream. Këtu duhet theksuar se çdo skedar shoqërohet me të ashtuquajturin pozicion aktual të leximit ose shkrimit kur hapet. Kur një skedar hapet për lexim, ky pozicion vendoset në fillim të skedarit. Por mjaft shpesh është e nevojshme të kontrolloni pozicionin me dorë në mënyrë që të jeni në gjendje të lexoni dhe shkruani duke filluar nga një vendndodhje arbitrare në skedar. Funksionet seekg() dhe tellg() ju lejojnë të vendosni dhe kontrolloni treguesin aktual të leximit, ndërsa funksionet seekp() dhe tellp() bëjnë të njëjtën gjë për treguesin e shkrimit.

    Metoda seekg(1_parameter, 2_parameter) zhvendos pozicionin aktual të leximit nga skedari me numrin e bajteve të specifikuara në 1_parameter në lidhje me vendndodhjen e specifikuar në 2_parameter. 2_parametri mund të marrë një nga tre vlerat:

    ios::beg - nga fillimi i skedarit;

    ios::cur - nga pozicioni aktual;

    ios::end - nga fundi i skedarit.

    Këtu beg, cur dhe end janë konstante të përcaktuara në klasën ios dhe simbolet:: tregojnë një operacion aksesi në këtë klasë. Për shembull, operatori fin.seekg(-10, ios::fund); ju lejon të vendosni pozicionin aktual të leximit nga skedari 10 bajt para përfundimit të skedarit.

    Tani kthehemi te përshkrimi i programit. Bazuar në faktin se nuk e dimë numrin e numrave të shkruar në skedar, fillimisht duhet të zbulojmë numrin e numrave. Për këtë, duke përdorur fin.seek(0, ios::fund); kalojmë në fund të skedarit dhe përdorim funksionin tellg() për të kthyer gjatësinë e skedarit në bajt në variablin dfb. Funksioni tellg() kthen pozicionin aktual të treguesit në bajt. Meqenëse gjatësia e një numri të plotë në bajt është e njohur për ne (4 byte), nuk është e vështirë të llogaritet numri i numrave të shkruar në skedar, duke ditur gjatësinë e skedarit në bajt ( N=dfb/4;). Pasi kemi mësuar numrin e numrave, ne krijojmë një grup dinamik dhe kalojmë në fillim të skedarit në mënyrë që të fillojmë leximin e të dhënave duke përdorur funksionin e leximit (). Pasi numri i bajtëve të të dhënave të specifikuara nga ne (dfb) të transferohet në buferin e të dhënave (arr), të dhënat e lexuara në këtë mënyrë fitojnë strukturën e një grupi dhe bëhen plotësisht të përshtatshme për çdo operacion dhe transformim.

    Skedarët. Në të njëjtën kohë, nga pikëpamja e zbatimit teknik në nivelin e harduerit, skedarët e tekstit janë një rast i veçantë i skedarëve binare, dhe, kështu, në kuptimin e gjerë të fjalës, çdo skedar është i përshtatshëm për përcaktimin e "binare". dosje".

    Skedarët binare shpesh quhen skedarë të ekzekutueshëm dhe të dhëna të kompresuara, por është e gabuar të kufizohet ky koncept në këtë mënyrë.

    Vizualizimi

    Për një paraqitje vizuale të një skedari binar, ai ndahet në copa me përmasa të barabarta, të paraqitura si numra, të shkruar zakonisht në heksadecimal, ndonjëherë në oktal, binar ose dhjetor. Madhësia e treguar e një pjese mund të jetë e barabartë me një oktet, si dhe me dy ose katër (në rastin e ndarjes në copa të disa okteteve, zbatohet rendi i bajtit të miratuar në platformën e përdorur). Varësia e gamës së numrave të përfaqësuar nga madhësia e pjesës është paraqitur në tabelë:

    oktetë numri i biteve heksadecimal oktal dhjetore
    e panënshkruar
    dhjetore
    ikonike
    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

    Shpesh, përveç vlerave numerike të bajteve, shfaqen edhe karakteret e faqes së kodit, për shembull, karakteret e shtypura ASCII në të djathtë) të fillimit të skedarit PNG të logos së 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 |[email i mbrojtur]@@...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***... | ..............|

    Instrumentet

    Për vizualizim

    • korrigjimi (në Microsoft Windows, pjesërisht)
    • hexdump (në GNU/Linux etj.)

    Për redaktim

    Letërsia

    • Webster's New World Dictionary of Computer Terms, 4. Ed, Prentice Hall, NY, 1992. ISBN 0-671-84651-5
    • Leontiev B.K. Formatet e skedarëve të Microsoft Windows XP: A Handbook, M.: ZAO "New Publishing House", 2005. ISBN 5-9643-0059-6

    Fondacioni Wikimedia. 2010 .

    Shihni se çfarë është "Skedari Binar" në fjalorë të tjerë:

      Egzistoj., m., prdor. komp. shpesh Morfologjia: (jo) çfarë? dosje, jo? dosje, (shih) çfarë? dosje çfarë? dosje për çfarë? në lidhje me dosjen pl. çfarë? dosjet, (jo) çfarë? dosjet se? fotografi, (shih) çfarë? dosjet se? dosjet për çfarë? rreth skedarëve 1. Një grup quhet skedar ... ... Fjalori i Dmitriev

      Skedari binar (binar) në kuptimin e gjerë: një sekuencë bajtash arbitrare. Emri është për faktin se bajtët përbëhen nga bit, domethënë shifra binare (binare angleze). Në kuptimin e ngushtë të fjalës, skedarët binare janë kundër skedarëve tekstualë. ... ... Wikipedia

      Skedari binar (binar) në kuptimin e gjerë: një sekuencë bajtash arbitrare. Emri është për faktin se bajtët përbëhen nga bit, domethënë shifra binare (binare angleze). Në kuptimin e ngushtë të fjalës, skedarët binare janë kundër ... ... Wikipedia

      skedari i konfigurimit- Një skedar binar ose tekst që përmban informacion që përcakton sjelljen e një aplikacioni, kompjuteri ose pajisjeje rrjeti. Temat e rrjetit duke llogaritur skedarin e konfigurimit EN… Manuali Teknik i Përkthyesit

      Ky term ka kuptime të tjera, shih IPA (kuptimet). .IPA është një format skedari i arkivit të aplikacionit nga Apple për iPhone, iPod Touch dhe iPad. Skedarët me këtë shtesë ruhen në App Store dhe shkarkohen duke përdorur iTunes për ... ... Wikipedia

      Ky artikull ose seksion ka nevojë për rishikim. Nuk ka module, OOP dhe tendenca të tjera të reja në Pascal. Përshkrimi i shtesave duhet të jetë i pranishëm vetëm në artikujt në lidhje me ... Wikipedia

      Pascal Semantics: procedural Lloji i ekzekutimit: përpilues I prezantuar në: 1970 Autor(ët): Niklaus Wirth Pascal është një gjuhë programimi me qëllime të përgjithshme të nivelit të lartë. Një nga gjuhët më të famshme të programimit, gjerësisht ... ... Wikipedia

      Emri Gopher: Gopher Port/ID: 70/TCP Specifikimi: RFC 1436 Implementimet kryesore (klientët): Mozilla Firefox, Microsoft Windows: IE 5.x, IE 6 (i kufizuar në MS) ... Wikipedia

      Emri: Gopher Port / ID: 70 / TCP Specifikimi: RFC 1436 Implementimet kryesore (klientët): Mozilla Firefox, Microsoft Windows: Internet Explorer 5.x, Internet Explorer 6 (i kufizuar në MS) Gopher i shpërndarë protokollit të rrjetit të kërkimit dhe transmetimit ... ... 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

    Artikujt kryesorë të lidhur