我已经编写了直接读取.z压缩文件的代码。 它在linux和mac os上都能正常工作。但这在Windows中无法正常工作。
#include <iostream>
#include <vector>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/zlib.hpp>
// cl /EHsc uncompress.cpp
std::vector<char> & readline(std::istream & stream, std::vector<char> & container) {
char c;
container.clear();
while (stream && stream.get(c)) {
container.push_back(c);
if (c == '\n') break;
}
return container;
}
int main () {
boost::iostreams::filtering_istream in;
boost::iostreams::filtering_istream cinn(std::cin);
in.push(boost::iostreams::zlib_decompressor());
in.push(cinn);
std::vector<char> line;
while (readline(in, line).size() != 0) {
std::string str(line.begin(), line.end());
std::cout << "--" << str ;
}
}
在Linux或Mac上以./a.out < compressed.z
的身份运行它时,效果很好
从Windows uncompressed.exe < compressed.z
运行它时,它不显示文件的内容。
为什么这样?
答案 0 :(得分:0)
std::cin
未以二进制模式打开,因此它在Windows上进行行尾转换,默认情况下会破坏所有输入文件。有两种解决方案:
_setmode( _fileno(stdin), _O_BINARY )
将stdin
转换为二进制模式。