using ofstream to alter file contents WITHOUT overwriting them

S

Stewart

is there any way this can be done? I've looked at the help files and
checked out as many tutorials as i could find on the net (as always) but no
joy.

thanks
 
V

Victor Bazarov

Stewart said:
is there any way this can be done? I've looked at the help files and
checked out as many tutorials as i could find on the net (as always) but no
joy.

What does "alter without overwriting" mean?
 
J

John Harrison

Stewart said:
is there any way this can be done? I've looked at the help files and
checked out as many tutorials as i could find on the net (as always) but
no joy.

thanks

If you mean inserting or removing pieces of a file, then the answer is no.
Files (in any language) don't work like that.

john
 
S

Stewart

ah - sorry for the lack of clarity in my last post. it was pretty late when
i worte this and i was really tired from trying to solve this prob.

what i meant was suppose i had a text file with a string like:
"halo 2 is out on 11th novemeber"

now if i were to move the file poitner along a bit and insert some text
(let's say "asgujdsgf") then, you'd have something like this as a result:
halo 2 is out on 11asgujdsgfber

what I WANT to do is insert a string into the text in a text file, without
overwriting the pre-existing text, like this:
"halo 2 is out on 11th asgujdsgnovemeber"

is this at all possible?

thanks again
 
V

Victor Bazarov

Stewart said:
ah - sorry for the lack of clarity in my last post. it was pretty late when
i worte this and i was really tired from trying to solve this prob.

what i meant was suppose i had a text file with a string like:
"halo 2 is out on 11th novemeber"

now if i were to move the file poitner along a bit and insert some text
(let's say "asgujdsgf") then, you'd have something like this as a result:
halo 2 is out on 11asgujdsgfber

what I WANT to do is insert a string into the text in a text file, without
overwriting the pre-existing text, like this:
"halo 2 is out on 11th asgujdsgnovemeber"

is this at all possible?

Right... No. File streams are essentially a mapping of file contents on
your external storage. AFAIK, no external storage allows "insertions"
except perhaps a very particular ones (a stack of punch-cards, maybe?).
So, since in general there is no support for insertions, ofstream, being
a generic file stream, doesn't have any mechanism in it either.

V
 
H

Howard

Stewart said:
ah - sorry for the lack of clarity in my last post. it was pretty late
when i worte this and i was really tired from trying to solve this prob.

what i meant was suppose i had a text file with a string like:
"halo 2 is out on 11th novemeber"

now if i were to move the file poitner along a bit and insert some text
(let's say "asgujdsgf") then, you'd have something like this as a result:
halo 2 is out on 11asgujdsgfber

what I WANT to do is insert a string into the text in a text file, without
overwriting the pre-existing text, like this:
"halo 2 is out on 11th asgujdsgnovemeber"

is this at all possible?

thanks again

The standard method is to read the file in, writing out to a new file all
the text up to the "insertion point", then writing out the text you're
inserting, then writing out the rest of the file. (But you're writing to a
different file, you understand. You can always rename the file(s), of
course, so that it looks like you're writing to the "same" file.)

-Howard
 
J

Jeff Flinn

Howard said:
The standard method is to read the file in, writing out to a new file all
the text up to the "insertion point", then writing out the text you're
inserting, then writing out the rest of the file. (But you're writing to a
different file, you understand. You can always rename the file(s), of
course, so that it looks like you're writing to the "same" file.)

One possible approach for single file implementation would be:

- copy string to circular buffer
- open and io stream for read/write
- find insertion point in io stream
- loop while !eof
- read char from stream
- push back char to buffer
- (over)write char to stream from front of circular buffer
- pop front
- loop while !buffer.empty()
- write char to stream from front of circular buffer
- pop front

Any comments from those more familiar with streams? Performance relative to
other methods would certainly need to be measured. I could see using this
approach when inserting relatively small string near the tail of a very
large file.

Jeff F
 
S

Stewart

yeah it looks like i'll have to do summat like that. thanks a lot for all
of your help.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top