F
fryme
I'm trying to create my own file format. I want to store image file
and some text description in that file.
File format will be something like that:
image_file_size
image_data
desctiption_file_size
description_data
But without '\n' symbols.
For that purpose i'm using std::ios::binary. Here is some code,
describes that process (it is sketch, not last variant):
Writing my file.
long long image_length, desctiption_length;
std::fstream m_out(output_file_path, std::ios:
ut |
std::ios::binary);
std::ifstream input_image(m_image_file_path.toUtf8().data());
input_image.seekg(0, std::ios::end);
image_length = input_image.tellg();
input_image.seekg(0, std::ios::beg);
// writing image length to output file
m_out.write( (const char *)&image_length, sizeof(long long) );
char *buffer = new char[image_length];
input.read(buffer, image_length);
// writing image to file
m_out.write(buffer, image_length);
// writing description file the same way
// ...
Reading my file.
std::fstream m_in(m_file_path.toUtf8().data(), std::ios::in );
long long xml_length, image_length;
m_in.seekg(0, std::ios::beg);
m_in.read((char *)&image_length, sizeof(long long));
m_in.seekg(sizeof(long long));
char *buffer = new char[image_length];
m_in.read(buffer, image_length );
std::fstream fs("E:\\Temp\\out.jpg");
fs.write(buffer, image_length);
And now image (E:\Temp\out.jpg) is broken. I'm watching it in hex
editor and there are some extra bits.
Can somebody help me and tell what i'm doing wrong?
and some text description in that file.
File format will be something like that:
image_file_size
image_data
desctiption_file_size
description_data
But without '\n' symbols.
For that purpose i'm using std::ios::binary. Here is some code,
describes that process (it is sketch, not last variant):
Writing my file.
long long image_length, desctiption_length;
std::fstream m_out(output_file_path, std::ios:
std::ios::binary);
std::ifstream input_image(m_image_file_path.toUtf8().data());
input_image.seekg(0, std::ios::end);
image_length = input_image.tellg();
input_image.seekg(0, std::ios::beg);
// writing image length to output file
m_out.write( (const char *)&image_length, sizeof(long long) );
char *buffer = new char[image_length];
input.read(buffer, image_length);
// writing image to file
m_out.write(buffer, image_length);
// writing description file the same way
// ...
Reading my file.
std::fstream m_in(m_file_path.toUtf8().data(), std::ios::in );
long long xml_length, image_length;
m_in.seekg(0, std::ios::beg);
m_in.read((char *)&image_length, sizeof(long long));
m_in.seekg(sizeof(long long));
char *buffer = new char[image_length];
m_in.read(buffer, image_length );
std::fstream fs("E:\\Temp\\out.jpg");
fs.write(buffer, image_length);
And now image (E:\Temp\out.jpg) is broken. I'm watching it in hex
editor and there are some extra bits.
Can somebody help me and tell what i'm doing wrong?