【发布时间】:2025-12-16 16:40:01
【问题描述】:
我正在做一个需要读取文件的项目。这些文件可以是未压缩的或压缩的(.gz 扩展名)。
我已经设法将我的项目设置为利用 zlib 和 boost::iostreams 来执行解压缩,但我无法正确处理 std::istream 形式的解压缩文件。
让我更清楚: 我正在编写的方法将文件的路径作为输入,并且读取文件的逻辑在 std::ifstream 对象类型上完成。如果文件是未压缩的,我没问题,但是压缩时会出现问题。 根据 boost 网站的在线文档,我正在做这样的事情
//Read from the first command line argument, assume it's gzipped
std::ifstream file(filename, std::ios_base::in | std::ios_base::binary);
boost::iostreams::filtering_streambuf<boost::iostreams::input> inbuf;
inbuf.push(boost::iostreams::gzip_decompressor());
inbuf.push(file);
//Convert streambuf to istream
std::istream instream(&inbuf);
问题是我想为未压缩文件创建一个std::ifstream,但获得未压缩文件的唯一方法是std::istream(sn-p 的最后一行)。因为我的处理逻辑需要 std::ifstream,所以我试图弄清楚如何从 istream 获取 ifstream,但到目前为止我还没有找到有用的资源。
重写逻辑来处理不同的输入类型不是我想要的目标,所以我问你是否对这个主题有任何提示。
感谢任何帮助/资源!
谢谢
【问题讨论】:
标签: c++ boost zlib ifstream istream