问题标签 [boost-iostreams]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - boost::iostreams::filtering_stream 的底层流的类型是什么?
我有这个使用 Boost.Iostreams 执行解压缩的流:
现在,我想std::istream& in
稍后访问底层流 ( )。天真地,我认为请求std::istream
通过component()
会做到这一点,但我得到的指针是null
:
我应该为此提供什么类型component()
?
c++ - 使用自定义源提升 Iostreams zlib_error
我正在尝试使用 azlib_decompressor
通过istreambuf_iterator
. 我找不到一种内置方法来使用输入迭代器作为流的输入(如果已经存在,请指出一种方法)所以我写了这个源:
并像这样使用它:
给出这个输出:
我不确定为什么会产生错误,因为从文件加载工作正常。
c++ - boost::iostreams::copy - sink - ENOSPC (No space left on device) 错误处理
在下面的代码片段中,有没有办法处理ENOSPC
?
如果我strace
使用已编译的二进制文件,代码似乎会无限调用writev()
相同的数据并返回ENOSPC
错误。
如何处理此错误或将其作为错误从boost::iostreams::copy()
.
exceptions()
是否可以在对象上设置适当的ofstream
?我试过ofs.exceptions(std::ios::badbit | std::ios::failbit)
了,但没有任何区别。
上面的代码使用 GCC 编译并在 Linux 上运行。提升版本 1.55。
c++ - boost::iostreams::stream 线程安全
如果我的接收器是线程安全的,我可以从多个线程写入 boost::iostreams::stream 而不进行同步吗?
c++ - boost iostreams 断言失败
我需要能够使用单个 fstream 来获得与平台无关的文件使用方式。特别是,我需要能够在 Windows 上支持带有 unicode 字符的文件路径,同时尽可能减少对代码的干扰以支持它。因此,似乎 boost iostreams 可以提供答案。但是,在尝试使用它时,我遇到了两次失败,这引起了我的担忧。请参阅以下示例代码:
在 Windows 上,我仅限于 GCC 4.7.2 和 Boost 1.50。
评论解释了这两个失败,但我将在这里扩展它们。对我来说,第一个也是最大的问题是当我尝试将流对象用作“普通”fstream 对象时。如果我在其构造函数中打开 fstream,那么一切都很好而且很花哨(可以在前两个匿名范围中看到)。但是如果我分配 fstream 对象然后尝试稍后打开它,“坏事”就会发生。
如果我尝试调用 boost::iostreams::stream::open(),我会收到编译器错误,指出它无法将参数 1 (boost::filesystem::path) 转换为 boost::iostreams::file_descriptor_sink。当它可以用 boost::filesystem::path 构建时,为什么它不工作?在任何一种情况下,尝试使用流的 operator->() 调用 boost::iostreams::file_descriptor_sink::open() 都会导致断言失败(如第三个匿名范围所示)。这是非常邪恶的,因为在我看来它应该抛出异常而不是使断言失败。断言失败将向我表明 boost 代码中存在错误。
我遇到的第二个失败是typedef
ed fstream 和 ofstream 似乎可以正常工作(好吧,编译和链接)。但是当我尝试使用 ifstream 时,在尝试调用 ifstream->open(); 时出现链接器故障;我在 Windows(如前所述的 MinGW 配置)以及带有Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
. 由于它编译得很好并且两者之间的唯一区别是它是源还是接收器......并且两者都应该能够打开文件......这让我认为这也是boost中的一个错误。
有什么想法或建议吗?
c++ - 如何使用 boost::iostreams 管道进入 std::cout
我是新手,boost::iostreams
所以这可能是微不足道的:
假设namespace io = boost::iostreams;
这行得通
这有效
但这不能编译
你怎么插管std::cout
?
c++ - 我应该用 boost::iostreams 将它实现为 Sink 还是 OutputFilter?
我使用 aboost::iostreams::filtering_ostream
为我的应用程序编写调试日志。我想通过保留最后 100 个左右的条目并在发生崩溃时将它们保存到文件中来改进我的调试日志记录。
我想我可以通过两种方式做到这一点:
- 我可以在流数据上实现一个“无操作”的 OutputFilter,但在某些成员变量中保留有限的条目列表。
- 我可以实现一个类似的接收器。
我看到选项 1 的两个优点:我不需要将流“发送”到两个目的地,并且有一个方便basic_line_filter
的基类,使其实现非常容易。但从概念上讲,选项 2 似乎更正确。我还缺少什么其他智慧?你有什么建议吗?有第三种/第四种方式吗?
c++ - 在C++中将多个文件压缩成一个文件
我在网上搜索,看看是否有任何有效的方法可以使用标准库或 boost 库将多个文件压缩成一个文件。目标只是压缩文件,因为可以手动完成解压缩。
目前我正在使用 ZipArchive 库,但我想使用标准库或 boost 库。任何帮助将不胜感激。
编辑 由于似乎没有办法使用标准库将多个文件压缩成 C++ 中的单个文件,我想知道什么是最合适的外部库。不得不提的是,我只需要压缩文件,它们的解压需要手动完成。
boost - 我可以将 boost::iterator “推”到 boost iostream 上吗
我设法开始工作:
1) base 64 编码器/解码器使用 boost::archive::iterators 从 Base64 派生的编码器使用 boost throw 异常
2) 使用 boost::iostreams 的压缩器,如下所示: boost zlib 问题
所以代码看起来像这样:
这似乎复制了很多数据。
有没有办法将 base64 编码器推送到 iostream 上?