检查流是否为空

  • 本文关键字:是否 c++ stream ofstream
  • 更新时间 :
  • 英文 :


我创建了一个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";

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

相关内容

  • 没有找到相关文章

最新更新