25 Open( filename, mode );
37 if ( !
_file.is_open() )
38 throw std::runtime_error(
"BinaryFile::Open('" + _filename +
", " +
hexint( mode ) +
54 if ( !
_file.seekg( abs_offset, std::ios::beg ) )
55 throw std::runtime_error(
"BinaryFile::Seek('" +
_filename +
"') failed." );
60 if ( !
_file.read( reinterpret_cast<char*>( buffer ), length ) )
61 throw std::runtime_error(
"BinaryFile::Read('" +
_filename +
"') failed to read " +
62 decint( static_cast<int>( length ) ) +
" bytes." );
69 std::fstream::pos_type save_pos =
_file.tellg();
70 if ( save_pos == std::fstream::pos_type( -1 ) )
71 throw std::runtime_error(
"BinaryFile::FileSize('" +
_filename +
72 "' failed to determine current position." );
74 if ( !
_file.seekg( 0, std::ios::end ) )
75 throw std::runtime_error(
"BinaryFile::FileSize('" +
_filename +
76 "') failed to seek to end of file." );
77 std::fstream::pos_type size =
_file.tellg();
78 if ( size == std::fstream::pos_type( -1 ) )
79 throw std::runtime_error(
"BinaryFile::FileSize('" +
_filename +
80 "') could not determine file size." );
82 if ( !
_file.seekg( save_pos ) )
83 throw std::runtime_error(
"BinaryFile::FileSize('" +
_filename +
84 "') failed to seek to original position." );
92 if ( ( filesize % elemsize ) != 0 )
95 " does not contain an integral number of elements of size " +
98 return static_cast<unsigned int>( filesize / elemsize );
103 size_t size =
sizeof( *this ) +
_filename.capacity();
size_t sizeEstimate() const
size_t GetElementCount(size_t elemsize)
void Open(const std::string &filename, std::ios::openmode mode)
char * binary(unsigned int val, int nbits)
std::string decint(unsigned short v)
std::fstream::pos_type FileSize()
std::string hexint(unsigned short v)
int filesize(const char *fname)
void ReadBuffer(void *buffer, std::streamsize length)
void Seek(std::fstream::pos_type abs_offset)