Large files in C++

More specifically, wxWidgets and MSVC++ 2010. I found an msdn query that says 2010 is the first version that supports >2Gb file sizes with std::iostream. So that's fine with me. We found a few necessary changes:
  • stat() changes to _stat64()
  • istream::tellg() returns an istream::streampos, not an int.
But what on earth happened here?


// save the beginning position of this line for when we have to back up
istream::streampos begin_line_pos = infile_stream.tellg();
string std_keyword;
infile_stream >> std_keyword;

// bunch of other keyword handling.....
if (keyword == "shape") {
   infile_stream.seekg(begin_line_pos);
   // Danger! over 2Gb, this turns into negative seek, fails:
   //infile_stream.seekg(begin_line_pos, ios::beg);
   return true;
}
How does the commented line with the seekg() fail? It should treat begin_line_pos as an offset, which should be 64 bit. It's REALLY LAME if it sees the unsigned streampos and converts it to 32 bits for some reason....
Very strange.

Comments

Popular posts from this blog

Inno Setup custom data directory location

OpenEmbedded Angstrom for Advantech PCM-9375

Inno Setup MSVC vcredist without bothering your users