ofstream exception handling

前端 未结 3 1267
梦毁少年i
梦毁少年i 2021-02-19 19:53

Deliberately I\'m having this method which writes into a file, so I tried to handle the exception of the possiblity that I\'m writing into a closed file:

void pr         


        
相关标签:
3条回答
  • 2021-02-19 20:25

    consider following:

    void printMe(ofstream& file)
    {
            file.exceptions(std::ofstream::badbit | std::ofstream::failbit);
            try
            {
                file << "\t"+m_Type+"\t"+m_Id";"+"\n";
            }
            catch (std::ofstream::failure &e) 
            {
                std::cerr << e.what() << std::endl;
            }
    };
    
    0 讨论(0)
  • 2021-02-19 20:47

    Streams don't throw exceptions by default, but you can tell them to throw exceptions with the function call file.exceptions(~goodbit).

    Instead, the normal way to detect errors is simply to check the stream's state:

    if (!file)
        cout << "error!! " << endl ;
    

    The reason for this is that there are many common situations where an invalid read is a minor issue, not a major one:

    while(std::cin >> input) {
        std::cout << input << '\n';
    } //read until there's no more input, or an invalid input is found
    // when the read fails, that's usually not an error, we simply continue
    

    compared to:

    for(;;) {
        try {
            std::cin >> input;
            std::cout << input << '\n';
        } catch(...) {
            break;
        }
    }
    

    See it live: http://ideone.com/uWgfwj

    0 讨论(0)
  • Exception of the type ios_base::failure, However note that you should have set the appropriate flag with ios::exceptions to generate the exceptions or else only internal state flags will be set for indicating the error, which is the default behavior for streams.

    0 讨论(0)
提交回复
热议问题