Keith
Keith

Reputation: 11

Read/Write at the same time

What I am doing is opening my file using fstream at the start of the main and closing it at the end. In between I am writing "Hello World" and after that reading what I wrote but the result is always weired charecters and not the "Hello World". I did do a cast to char but that didnt help. Any way I can do this?

Upvotes: 1

Views: 978

Answers (3)

Dominique McDonnell
Dominique McDonnell

Reputation: 2520

Make sure you are seeking to the beginning of the file before reading, like so:

fileFStream.seekg(0, ios_base::beg);

If that doesn't work, post your code.

Upvotes: 1

Mike DeSimone
Mike DeSimone

Reputation: 42825

I'd be amused if this works, because I always had to open a file twice to do that: once for reading and once for writing. Even then, I had to write the whole file out and close it (which flushed the OS buffers) before I could be sure I could read the whole file and not get an early EOF.

Nowadays, since I use Unix-style operating systems, I would just use the pipe() function. Not sure if that works in Windows (because so much doesn't, like select() on files).

Upvotes: 1

Alex Martelli
Alex Martelli

Reputation: 882093

You need to interpose an fseek call when you switch from reading to writing, or viceversa. (Of course, you also need to fopen for "r+" or the like, so that both reading and writing are allowed, but I imagine you are already aware of that -- the need for seeking in order to switch between reading and writing is a lesser known fact).

As this page puts it,

For the modes where both read and writing (or appending) are allowed (those which include a "+" sign), the stream should be flushed (fflush) or repositioned (fseek, fsetpos, rewind) between either a reading operation followed by a writing operation or a writing operation followed by a reading operation.

Upvotes: 2

Related Questions