megoldva: fájl másolása byte-onként, windows alatt

Fórumok

Sziasztok!

Az alábbi problémám lenne, windows alatt valamiért nem jól megy az ifstream.
Az alábbi kód elvileg az aaa.bmp tartalmát belemásolná az xxx.bmp-be.
Linux alatt oké. Windows alatt az xxx.bmp az csak néhány Kb-os lesz. (az eredeti file 2-3 Mb). Szóval még nem vagyunk a file végén, és egyszercsak az EOF flag bebillen.
Valaki találkozott már ezzel a hibával?

int main()
{
ifstream bemenet("aaa.bmp");
ofstream kimenet("xxx.bmp");
while(!bemenet.eof())
{
unsigned char ch;
ch=bemenet.get();
kimenet.put(ch);
}
bemenet.close();
kimenet.close();
return 0;
}

Hozzászólások

Totál nem értek a céhez, csak mint régi dos-os és assemblys kérdezem, az eofnál nem az ascii 26-os karaktert érti a program?
Azaz addig másol, mig ch <> ascii(26) vagy mi?

Esetleg próbáld meg bináris módban megnyitni mindkét fájlt.

En is csak ovatosan kerdezem, hogy nem lehet hogy poziciot is kell allitani, legalabbis a windows alatt? Vagy nem lehet hogy az EOF erteke csak egy i/o muvelet utan allitodik win alatt? Mi lenne ha hatultesztelosre csinalnad meg?

Ha mashogy nem derul ki a hiba, mi lenne ha char olvasas utan novelned eggyel a poziciot? Es a falj veget ugy vizsgalnad, hogy a pozicio elerte-e mar a meretet? Habar lehet hogy ez gany megoldas, jobb nem jut eszembe.

Meg jo lenne, ha kiiratnad magadnak kozben a fgetpos fuggvennyel, hogy eppen hol tart a falj olvasasa. lehet hogy segitene felderiteni a hibat.

érdemes lenne ios::binary módban megnyitni:

ifstream in("xyz", ios::binary);