Sign in to follow this  
Followers 0
mikenovemberoscar

C++ Binary File I/O Problem

4 posts in this topic

Hi all,

 

I am trying to write binary data to a file, and I have the following C++ code:

(I borrowed the write & read functions from here)

u8 readU8(istream& file)
{
    u8 value = '\0';
    file.read((char*)value,1);
    return value;
}

void writeU8(ostream &file, u8 value)
{
    file.write((char*)value,1);
}
...
       animationFile.open("/Users/me/Desktop/BINARY_FILE.bin", ios::out | ios::binary | ios::trunc);
        
        if (!animationFile.is_open())
        {
            return 1;
        }
        
        writeU8(animationFile,u8('a'));
...

Although my program crashes and lldb returns an 'EXC_BAD_ACCESS (code = 1, address = 0x50).

 

What is wrong? If I change writeU8 to writeU16 (and the anonymous object to u16('a')):

void writeU16(ostream &file, u16 value)
{
    u8 bytes[2];
    
    // Extract the individual bytes from our value.
    
    bytes[0] = (value) & 0xFF; // Low byte
    bytes[1] = (value >> 8) & 0xFF; // High byte
    
    // Write those bytes to the file.
    
    file.write((char*)bytes,2);
}

There is no exception, but no data is written to the file.

I have also tried many different paths and filenames.

 

Thanks

Edited by mikenovemberoscar
0

Share this post


Link to post
Share on other sites

write takes a pointer to the data, but value in writeU8() is the value you want to write to the file. Take the address of the value variable to get a pointer to it. The code in writeU16() appears to be correct though. How do you determine that nothing is written to the file?

0

Share this post


Link to post
Share on other sites

An array implicitly decays to a pointer to the first element. Hence the array version works, but the individual value does not.

0

Share this post


Link to post
Share on other sites

Ah thankyou Brother Bob and rip-off! That fixed it. I apologise too - the reason no file was being written was I had not closed the ofstream before checking the file's size. 

Thanks again!

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0