C++ can I reuse fstream to open and write multiple files?

前端 未结 3 1467
温柔的废话
温柔的废话 2020-12-06 09:31

I have 10 files need to be open for write in sequence. Can I have one fstream to do this? Do I need to do anything special (except flush()) in between each file or just call

3条回答
  •  难免孤独
    2020-12-06 10:23

    You will need to close it first, because calling open on an already open stream fails. (Which means the failbit flag is set to true). Note close() flushes, so you don't need to worry about that:

    std::ofstream file("1");
    // ...
    file.close();
    file.clear(); // clear flags
    file.open("2");
    // ...
    
    // and so on
    

    Also note, you don't need to close() it the last time; the destructor does that for you (and therefore also flush()'s). This may make a nice utility function:

    template 
    void reopen(Stream& pStream, const char * pFile,
                std::ios_base::openmode pMode = ios_base::out)
    {
        pStream.close();
        pStream.clear();
        pStream.open(pFile, pMode);
    }
    

    And you get:

    std::ofstream file("1");
    // ...
    reopen(file, "2")
    // ...
    
    // and so on
    

提交回复
热议问题