Re: Trying to extract different types of data from a singe file.
On Aug 2, 1:40 am, JoeC <enki...@yahoo.com> wrote:
On Aug 1, 1:14 pm, James Kanze <james.ka...@gmail.com> wrote:
I didn't realize it was so complicated loading user created
files as resources.
It's not that complicated, but... the language does not define
any binary formats (probably because there are so many to choose
from); when you do binary IO, you have to take charge of the
formatting yourself.
< That is beyond my skill level or knowledge of the
language. Thanks for the help, I though that loading files
was a standard operation.
Reading a file is. But whether text or binary, you really have
to define some sort of format. (Just outputting "file << i << j
<< k", where i, j and k are ints, won't give you something you
are read back in either.)
I might add that this is a basic software engineering problem,
and not particular to C++.
Anyway, your case is particularly simple, because you are
dealing mainly with "bytes", i.e. with raw memory, where each
byte is an element unto itself. Which is the exceptional case
where memcpy works, and istream::read and ostream::write do
everything. So you're only real problem is the initial length.
For that, I'd use an unsigned (rather than signed), although in
practice, unless you later have to port to very exotic machines,
it doesn't matter, and XDR format, which is simply four bytes,
high byte first, IOW:
to write:
void
writeInt(
std::ostream& dest,
unsigned value )
{
dest.put( (value >> 24) & 0xFF ) ;
dest.put( (value >> 16) & 0xFF ) ;
dest.put( (value >> 8) & 0xFF ) ;
dest.put( (value ) & 0xFF ) ;
}
to read:
void
readInt(
std::istream& source ;
unsigned& value )
{
unsigned result = 0 ;
result |= dest.get() << 24 ;
result |= dest.get() << 16 ;
result |= dest.get() << 8 ;
result |= dest.get() ;
if ( dest ) {
value = result ;
}
}
If not I will not make my graphics a resource.
Is that portable?
Do you need portability? I'm not too familiar with the Windows
platform. But from what I understand, a resource can be bundled
into the same file as your executable. Which is a definite
advantage when it comes to deployment. (Under Unix, I have my
own programs which serve more or less the same purpose: they
convert the "resource" to C++ data declarations, which I then
compile and link into the program. It's not the same thing, but
it serves the same purpose: to make the entire application a
single file, so you don't end up with a mixture of versions or
something partially installed.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34