» »

Branje binarne datoteke v polje znakov - C++

Branje binarne datoteke v polje znakov - C++

mih3cc ::

Rabil bi kodo katera bi mi iz binarne datoteke besedilo prebrala v polje znakov. Sem ze poizkusil z dat.read() funkcijo vendar ne vem kaj naj napisem pod velikost.
Hvala

Tutankhamun ::

Kaj pa je pri tebi dat? ifstream?
Kakšno pa je binarno besedilo?
const int MAX_VELIKOST_POLJA = 20;

char polje [MAX_VELIKOST_POLJA];

ifstream dat;
dat.open("e:\\slo-tech.txt");

if (!dat.is_open())
	return -1; // napakica, datoteka ni odprta

for (int i = 0; i < MAX_VELIKOST_POLJA; i++)
	dat.read (polje, 20);

dat.close ();

Pod velikost napišeš, koliko bajtov bi rad prebral. Oz. koliko je polje veliko
AMD Phenom QUAD 9950 Black Edition, 8GB

mih3cc ::

Ah ... saj za tekstovno datoteko sem že naredil, zdaj bi še za binarno rabil...

V binarno sem pa podatke zapisal takole:
char vrsta1[30] = "prva";
char vrsta2[30] = "druga";
char vrsta3[30] = "tretja";
char vrsta4[30] = "cetrta";
for (int i = 0; i < 30; i++)
{
dat.write((char*)&vrsta1[i], sizeof(vrsta1));
}
for (int i = 0; i < 30; i++)
{
dat.write((char*)&vrsta2[i], sizeof(vrsta2));
}
for (int i = 0; i < 30; i++)
{
dat.write((char*)&vrsta3[i], sizeof(vrsta3));
}
for (int i = 0; i < 30; i++)
{
dat.write((char*)&vrsta4[i], sizeof(vrsta4));
}

Tutankhamun ::

Ammm, to pa neki ne bo prov :).
dat.write(vrsta1, sizeof(vrsta1));
dat.write(vrsta2, sizeof(vrsta2));
dat.write(vrsta3, sizeof(vrsta3));
dat.write(vrsta4, sizeof(vrsta4));

Brez for zank delj, ker že write ti celo polje zapiše v fajl. S for zanko pa ..., uglavnem buffer overflow.

Za branje pa pol narediš, lih kontra
dat.read(vrsta1, sizeof(vrsta1));
dat.read(vrsta2, sizeof(vrsta2));
dat.read(vrsta3, sizeof(vrsta3));
dat.read(vrsta4, sizeof(vrsta4));
AMD Phenom QUAD 9950 Black Edition, 8GB

mih3cc ::

Hm, branje še vedno ne dela ... če izpišem spremenljivke vrsta1 itd potem se mi na zaslonu pojavijo čudni znakci :)

mih3cc ::

ifstream dat("prva.bin", ios::in|ios::binary);

char vrsta1[3000];
dat.read((char *) &vrsta1, sizeof(vrsta1));
dat.close();

Tole je koda, s katero sem uspel prebrati prvo vrsto besedila. Če dam zraven še kodo za drugo vrsto pa že ne dela več prav ...
Še koda s katero vpisujem v datoteko:

char vrsta1[30] = "blbl";
char vrsta2[30] = "eff";
char vrsta3[30] = "dsafe";
char vrsta4[30] = "fds";
dat.write((char *) &vrsta1, sizeof(vrsta1));
dat.write((char *) &vrsta2, sizeof(vrsta2));
dat.write((char *) &vrsta3, sizeof(vrsta3));
dat.write((char *) &vrsta4, sizeof(vrsta4));

Zgodovina sprememb…

  • spremenil: mih3cc ()

Tutankhamun ::

Čaki no... Neki ti tuki ne zastopš!
Če zapišeš v datoteko 4 bufferje po 30 znakov, morš tudi prebrat 4 bufferje po 30 znakov, ne pa neki 3000 znakov.

Tkole napiš pa bo delal. Js vem da dela. Moreš vedt, kaj upisuješ, pa kaj pol bereš. Lahko tudi prebereš cel fajl v buffer, pa ga pol sparsaš če hočeš. Ne moreš pa prebrat več kot si pa upisal! Sej če hočeš lahko kej uprašaš na forumu al pa na ZS, ampak osnove ti morjo bit nekak jasne. Moreš vedt kaj delaš

int main(int argc, char *argv[])
{
	ofstream ofs;
	ofs.open ("e:\\slo-tech.bin");

	char vrsta1[30] = "prva";
	char vrsta2[30] = "druga";
	char vrsta3[30] = "tretja";
	char vrsta4[30] = "cetrta";

	ofs.write(vrsta1, 30);
	ofs.write(vrsta2, 30);
	ofs.write(vrsta3, 30);
	ofs.write(vrsta4, 30); 

	ofs.close();

	ifstream ifs;
	ifs.open ("e:\\slo-tech.bin");

	char vrsta11[30];
	char vrsta22[30];
	char vrsta33[30];
	char vrsta44[30];

	ifs.read(vrsta11, 30);
	ifs.read(vrsta22, 30);
	ifs.read(vrsta33, 30);
	ifs.read(vrsta44, 30);

	ifs.close();

	cout << vrsta11 << endl <<
		vrsta22 << endl <<
		vrsta33 << endl <<
		vrsta44 << endl;

	return 0;
}



ifstream dat("prva.bin", ios::in|ios::binary);
ifstream je že tko input file stream, tko da ti ni treba pisat ios::in

dat.write((char *) &vrsta1, sizeof(vrsta1));
pa namest te vrstice piš
at.write(vrsta1, sizeof(vrsta1));

AMD Phenom QUAD 9950 Black Edition, 8GB

mih3cc ::

Super! Hvala, sem zrihtal zdaj :)

Binarne datoteke mi res niso bile nikoli jasne :$

Tutankhamun ::

Sej so use datoteke binarne...
AMD Phenom QUAD 9950 Black Edition, 8GB


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] LPC1343 - UART - AT commands

Oddelek: Programiranje
91127 (1017) JanezovJanez
»

[C++] Zapis vector<BOOL> v binarno datoteko

Oddelek: Programiranje
131058 (862) mn
»

C++(bin file) vprašanje

Oddelek: Programiranje
121495 (1373) technolog
»

win api (c++)

Oddelek: Programiranje
462539 (1819) Gundolf
»

c++ datoteke

Oddelek: Programiranje
464042 (3531) Vesoljc

Več podobnih tem