Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: binäärin lukemisesta

TsaTsaTsaa [27.01.2009 10:25:17]

#

Tein ensimmäistä kertaa ohjelman, jossa käsittelen binääritiedostoja ja heräsi kysymys. Alla koodi, joka lukee komentoriviparametrina annettua tiedostoa tavu kerrallaan ja kirjoittaa sitä samalla toiseen tiedostoon:

#include <fstream>
#include <string>

using namespace std;

int main(int argc, char* argv[]) {
   ifstream in(argv[1], ifstream::in|ifstream::binary);
   string strout(argv[1] + ".out");
   strout += ".out";
   ofstream out(strout.c_str(), ofstream::out|ofstream::binary);
   char tmp;
   while ( in >> tmp ) {
      out << tmp;
   }
   in.close();
   out.close();
   return 0;
}

Tuo siis toimii muuten nätisti, paitsi jos tiedostossa sattuu olemaan whitespace-merkkejä. Esimerkiksi välilyönnin (0x20) tullessa vastaan ifstreamin >>-operaattori hyppää seuraavaan merkkiin ja jättää välilyönnin lukematta kokonaan. Ongelman voi toki kiertää hoitamalla lukemisen seuraavalla tavalla:

tmp = in.peek();
in.ignore(1);

Mutta tuntuu jotenkin hölmöltä, että >>-operaattori toimii tuolla lailla. Voiko sen jotenkin estää?

EDIT: Vai pitäisikö binääriä luettaessa käyttää mieluummin jotain muuta ifstreamin metodia?

Gaxx [27.01.2009 10:34:48]

#

>> operaattori jättää välilyönnit, tabulaattorit ja rivinvaihdot pois.

Toisin sanoen tarkoitukseen sopivat funktiot ovat get ja put tai sitten read ja write. Katso c++:n feferenssi.

TsaTsaTsaa [27.01.2009 13:58:31]

#

Ok, tattis.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta