Search code examples
c++fstream

How to clear the content of a file after it is opened using fstream?


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?


Solution

  • 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 ();