Re: Discarding contexts of a text file starting from an offset
- From: Peter Nilsson <airia@xxxxxxxxxxx>
- Date: Mon, 05 Nov 2007 20:33:23 -0800
Richard Heathfield <r...@xxxxxxxxxxxxxxx> wrote:
parthaspand...@xxxxxxxxx said:
How can I get to discard the contents of a text file
from a specified offset(say, obtained from ftell)?
If you just mean that you don't want to read any more from
that file, then don't read any more from that file.
If you want to delete the contents of the file from a
specified point onwards, there is no standard function to
do that (although implementation-specific functions are
sometimes provided by library implementors), but there is
a standard *technique* to do it, which is very simple:
Simple to state, perhaps...
* open the existing file for input
* open a new file for output
What do you call this new file?
The obvious solution is to use a temp file, either via tmpnam
or tmpfile. The trouble is, many implementations will create
a temp file/name in a different directory from the file being
read.
This has consequences in a later step...
* if both those operations succeeded
* read from input all the data you want to keep,
and write it to the output (checking, of course,
that both reading and writing proceed correctly)
* close both files, checking that these operations
succeeded
* if all is still well
* delete the old file using remove()
* rename() the new file so that it takes the old name
Some versions of rename() do not allow you to rename across
disk drives, or other 'barriers'. If the temp file is not on
the same... um...'plane' as the original, the rename can fail.
That's it. Since this operation destroys data unrecoverably,
make sure at every step that all is well before proceeding
to the next step. Remember that, right up until the remove()
call, it's still possible to change your mind. After that,
you have no (standard) way to recover the data.
Other than offering to rewrite the temp file to a location of
the user's choice (and hoping it will succeed.)
There are other alternatives, though nothing perfect.
If the file in question is one that you've 'opened' for the
user, then many programs will immediately make a copy of it
and edit the copy, precisely so they can 'save' back over the
original file name and simply delete the copy.
Another option is to try the rename first, before copying.
If the rename fails, then you've saved time copying!
Perhaps the least robust in standard terms, but most robust
in practical terms, is to generate your own temp file name
simply by adding (say) '.tmp' to end of the name of the
original file.
--
Peter
.
- References:
- Discarding contexts of a text file starting from an offset
- From: parthaspanda22
- Re: Discarding contexts of a text file starting from an offset
- From: Richard Heathfield
- Discarding contexts of a text file starting from an offset
- Prev by Date: Re: MISRA C latest guidelines--- anybody has?
- Next by Date: Re: Bit count of an integer
- Previous by thread: Re: Discarding contexts of a text file starting from an offset
- Next by thread: Re: Discarding contexts of a text file starting from an offset
- Index(es):
Relevant Pages
|