我创建了一个 ofstream 并且有一点我需要检查它是否为空或是否有东西流入其中。
有什么想法我会怎么做?
这些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";
您可以使用ofstream.rdbuff获取文件缓冲区,然后使用streambuf::sgetn读取它。我相信这应该有效。