1

我创建了一个 ofstream 并且有一点我需要检查它是否为空或是否有东西流入其中。

有什么想法我会怎么做?

4

2 回答 2

2

这些std::ofstream文件不直接支持这一点。如果这是一项重要要求,您可以做的是创建一个过滤流缓冲区,该缓冲区在内部使用std::filebuf,但也记录是否有任何输出正在完成。这看起来很简单:

struct statusbuf:
    std::streambuf {
    statusbuf(std::streambuf* buf): buf_(buf), had_output_(false) {}
    bool had_output() const { return this->had_output_; }
private:
     int overflow(int c) {
         if (!traits_type::eq_int_type(c, traits_type::eof())) {
             this->had_output_ = true;
         }
         return this->buf_->overflow(c);
     }
     std::streambuf* buf_;
     bool            had_output_;
};

您可以使用它初始化std::ostream并根据需要查询流缓冲区:

std::ofstream out("some file");
statusbuf     buf(out.rdbuf());
std::ostream  sout(&buf);

std::cout << "had_output: " << buf.had_output() << "\n";
sout << "Hello, world!\n";
std::cout << "had_ouptut: " << buf.had_output() << "\n";
于 2012-02-09T06:30:30.480 回答
1

您可以使用ofstream.rdbuff获取文件缓冲区,然后使用streambuf::sgetn读取它。我相信这应该有效。

于 2012-02-09T06:29:52.253 回答