4

I need to open a file in read/write mode, read its content and then clear all. So, I cannot open it in truncate mode. How can I do that?

Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
eap
  • 168
  • 1
  • 1
  • 9

2 Answers2

17

Hate to disappoint you, but..

There's no standard way of clearing the contents of a file from an open std::fstream, the straight forward way is therefore to handle the two operations as what they really are.. two operations.

First handle all the reading, and later the writing (through a different stream object).


The solution

In other words; first open the file in read-only mode (std::ifstream) and read the data you are interested in, then discard that file-handle and open the file again.. this time in write-only and truncation mode (std::ofstream), so that you will clear the contents of the file.

std::ifstream ifs ("some_file.txt");

... // read old data

ifs.close ();

std::ofstream ofs ("some_file.txt", std::ios::out | std::ios::trunc); // clear contents

... // write new data

ofs.close ();
Community
  • 1
  • 1
Filip Roséen - refp
  • 62,493
  • 20
  • 150
  • 196
0

You could just rename the file before reading it and create an empty file with the original name.

Maxim Egorushkin
  • 131,725
  • 17
  • 180
  • 271