Kezdőoldal » Számítástechnika » Programozás » Bináris nullákat tartalmazó...

Bináris nullákat tartalmazó fájl beolvasása c++-ban. Hogyan?

Figyelt kérdés

Van egy fájlom, ami sajnos valamilyen számomra érthetetlen okból elég sok bináris nullát tartalmaz. Megnyitása legalább is bármilyen számomra ismert programmal majdnem lehetetlen.( próbáltam geditben, geanyben, kwrite-ban, notepad( windows xp-s, windows 7-es, és wine-osban is), wordpadban, wordben, Libreoffice Writer-ben, notepad++ban, de semmi nem nyitja meg ezek közül. Végül sikerült a linuxos cat parancs segítségével megnyitnom, csak annyi a bajom, hogy amennyiben pipeline-al mepróbálok a more parancsot lefuttatni, akkor az egész megadja magát.

Megkíséreltem c++-ban beolvasni a fájlt, itt pedig kiderült, hogy 4. karakter már eof karakter, szal nem tudom megnyitni. Konkrétan meg tudom, csak nem jó a

do {

....

}

while(file.eof());

feltétel semmire. Mivel tudnám beolvasni a fájlt a fájl végéig?


2013. máj. 17. 10:14
 1/7 SimkoL ***** válasza:
Az Xp-nél még van, win7 alatt nem tudom az "Edit". Itt a megnyitásnál "bináris megnyitás" és kész.
2013. máj. 17. 10:30
Hasznos számodra ez a válasz?
 2/7 SimkoL ***** válasza:
C++ pedig [link]
2013. máj. 17. 10:39
Hasznos számodra ez a válasz?
 3/7 SimkoL ***** válasza:
2013. máj. 17. 14:14
Hasznos számodra ez a válasz?
 4/7 SimkoL ***** válasza:
Bocsi az előzőt nem ide akartam
2013. máj. 17. 14:14
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:

Köszi a választ. Bináris állományt hogy olvasok be a fájl végéig?

Amúgy a registryről készítettem egy mentést és csinálnék hozzá egy normális megjelenítőt( olyan mint a normál regedit, nekem konkrétan regedit differencia ellenőrző kell két állapotból megmondja, hogy milyen kulcsok módosultak).

Ennek megoldására csináltam egy láncolt listát alkalmazó új tipust.

Csináltam belőle egy tömböt.

Utána rendeztem az tömböt.

Utólag ismét módosítottam a tömböt, megnéztem, hogy az azonos elemek memóriacímei egyezzenek meg( csökkentettem a méretet)

Viszont feldolzoztam 1000 soros buffert, de én az egészet szeretném. ( elejétől a végéig).

Ezután betettem visual c++-ba az új osztályomat megjelenítettem.

Kérdés, hogy tudom a bináris állományt a fájl végéig beolvasni?

2013. máj. 18. 09:35
 6/7 SimkoL ***** válasza:

// Bináris fájl olvasása

#include <iostream>

#include <fstream>

using namespace std;


ifstream::pos_type size;

char * memblock; //Ezt érdemes alkalmazni, így nem lesz gondunk a file hossza miatt.


int main () {

ifstream file ("proba013d.bin", ios::in|ios::binary|ios::ate);

if (file.is_open()) // Megnyitjuk olvasásra

{

size = file.tellg(); // Megadja a következő memóriablokk méretét

memblock = new char [size]; // Lefoglal egy memóriablokk-ot

file.seekg (0, ios::beg); // Beállítja a következő adatmodult olvasásra

file.read (memblock, size); // A memblock változóba beolvassa az adott méretű adatmodult

file.close(); // File lezárása


cout << "A teljes file a memoriaban van.";


delete[] memblock;

}

else cout << "A file megnyitasa sikertelen volt.";

return 0;

}



[link]

2013. máj. 18. 10:23
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:

Köszönöm most már értem!

Megszokásból mindig az ciklust kerestem benne, emiatt elsőre ha nem is de sokadszori futtatás után megértettem.

Most már ki tudom íratni a fájlomat standart outputra,de már át tudtam adni belőle a sorokat egy másik változónak.

Innen már az osztályom tudni fogja dolgát.

2013. máj. 18. 18:40

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!