Re: Help with binary I/O
On Nov 11, 7:53 pm, zr <zvir...@gmail.com> wrote:
On Nov 11, 10:05 am, joseph.redime...@baesystems.com wrote:
Hi there,
I'm trying to save a vector data structure to a binary file, then read
it back and see if all the contents are intact. So I'm trying to
following code below :
#include "stdafx.h"
#include <stdio.h>
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;
void main() {
//
// Create a test vector of integers and populate with test =
data
//
vector<int> int_ls;
int_ls.push_back(100);
int_ls.push_back(200);
int_ls.push_back(300);
int_ls.push_back(400);
int_ls.push_back(500);
//
// Dump the contents of the integer vector to a binary file
//
fstream binfile("fstream.out", ios::out|ios::binary);
binfile.seekp(0, ios::end);
binfile.write((char*)&int_ls,sizeof(int_ls));
binfile.close();
//
// Re-open the binary file and this time read the values an=
d
store again in vector structure
//
vector<int> int_ls2;
fstream binfile2("fstream.out", ios::out|ios::in|ios::binar=
y);
binfile2.seekg(0, ios::beg);
while (!binfile2.eof()) {
binfile2.read((char*)&int_ls2, sizeof(int_ls2));
}
binfile2.close();
//
// Now let's display what we just read in
//
int DATA_SIZE = int_ls2.size();
for (i=0; i<DATA_SIZE; i++) {
printf("\n int_ls2[%d] --> %d", i, int_ls2[i]);
};
}
** The above code manages to save to a file and even retrieve all the
values, but somehow I get an assert before it terminates.
** More info: I'm compiling it using Visual C++ 2008 as a Console
Application.
Thanks in Advance,
Joseph
A couple of errors i spotted:
1) binfile.write((char*)&int_ls,sizeof(int_ls));
sizeof(int_ls) returns the size of the container object. What you
probably meant was the size of the objects stored by the container
objects. A quick solution (perhaps not the most elegant) is:
binfile.write((char*)&int_ls.front(), int_ls.size()*sizeof int_ls[0]);
2) The while loop: similar problem as above. Try:
int buffer;
binfile2.read((char*)&buffer, sizeof(buffer));
while (!binfile2.eof()) {
int_ls2.push_back(buffer);
binfile2.read((char*)&buffer, sizeof(=
buffer));
}- Hide quoted text -
- Show quoted text -
Thanks for the suggestions everyone !! I tried all of them, and I
found this one works the best! Thank you very much ZR.