【发布时间】:2020-02-18 16:09:27
【问题描述】:
我希望使用boost::iostreams::filtering_streambuf 和newline_filter 将一条数据写入通过std::fopen 打开的文件。
这是一个我一直在尝试使用的小型可重现测试用例。
它只是产生一个空文件。
#include <string>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <errno.h>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/filter/newline.hpp>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <iosfwd>
#include <string>
#include <boost/iostreams/flush.hpp>
#include <boost/iostreams/operations.hpp>
#include <fstream>
#include <cstdio>
int main()
{
FILE *fp = nullptr;
std::string d ("file");
fp = std::fopen(d.c_str(), "w");
const int fd = fileno(fp);
boost::iostreams::file_descriptor_sink output(fd, boost::iostreams::never_close_handle);
boost::iostreams::filtering_streambuf<boost::iostreams::output>obuf;
#if defined(_WIN32)
obuf.push(boost::iostreams::newline_filter(boost::iostreams::newline::dos));
#else
obuf.push(boost::iostreams::newline_filter(boost::iostreams::newline::mac));
#endif
obuf.push(output);
std::ostream buffer(&obuf);
std::string myteststr = "Hello \n World\n";
buffer << myteststr;
buffer.flush();
boost::iostreams::flush(obuf);
return 0;
}
我在这里有什么明显的遗漏吗?
【问题讨论】:
标签: c++ boost iostream boost-iostreams