【问题标题】:boost / outputting to a file提升/输出到文件
【发布时间】:2012-07-22 09:53:57
【问题描述】:

我可以仅使用 boost 库将一些文本输出到文件吗?

我拥有的代码(官方文档):

#include <ostream>
#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/stream.hpp>

namespace io = boost::iostreams;

int main()
{
    io::stream_buffer<io::file_sink> buf("log.txt");
    std::ostream                     out(&buf);
    // out writes to log.txt
    out << "abc";
}

还有其他方法吗? (我不想使用标准流)。提前致谢。

【问题讨论】:

  • 为什么不想使用标准流?你对他们有什么看法?
  • 我正在尝试熟悉 boost。我真的是一个初学者,文档有时会误导我
  • Boost 可以部分看作是对 std 库的扩展——实际上许多 boost 项目最终成为标准的一部分(如智能指针)。那么,为什么扩展程序要提供已经存在的东西呢?

标签: c++ boost file-io stream


【解决方案1】:

C++ 程序中的输入和输出可以通过四种方式完成:

  1. 使用 C++ I/O 流。这是推荐的方式。即使使用 Boost I/O 流,也都是在幕后使用标准 I/O 流,并使用流运算符 &lt;&lt;&gt;&gt;
  2. C FILE API:fopenfprintf/fwrite/fgets/fread/等。我认为有处理 FILE 的 Boost I/O 流,但是您仍然使用流运算符 &lt;&lt;&gt;&gt;
  3. 在 Windows 上,使用 POSIX 子系统文件描述符。我认为这些也可以用于 Boost I/O 流。
  4. 本机文件处理。在 POSIX 系统(例如 Linux、BSD、OSX)上,这与上面的 3 相同,在 Windows 上参见例如this link

Boost I/O 流不应该是一个独立的 API,而是使用上述 I/O 系统之一来为程序员简化一些事情。

【讨论】:

    【解决方案2】:

    io::stream_buffer 派生自std::basic_streambuf,因此您可以使用本机basic_streambuf 公共方法,也可以使用boost::filesystem 流,但所有此类都派生自std:: 类。

    http://www.boost.org/doc/libs/1_50_0/libs/filesystem/doc/reference.html#File-streams

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多