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;
}
- 1324 megtekintés
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?
- A hozzászóláshoz be kell jelentkezni
Esetleg próbáld meg bináris módban megnyitni mindkét fájlt.
- A hozzászóláshoz be kell jelentkezni
köszi, ez segített
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
érdemes lenne ios::binary módban megnyitni:
ifstream in("xyz", ios::binary);
- A hozzászóláshoz be kell jelentkezni