在C++中读取压缩的二进制文件
Read zipped binary file in C++
我曾经使用popen(("zcat " + filename).c_str(), "r")
读取压缩文本文件。不过,这次我需要读取压缩的二进制文件。我尝试了popen(("zcat " + filename).c_str(), "rb")
,但失败了,因为即使文件确实存在,返回值也是NULL。
我能知道为什么路不通吗?我可以保证文件名定义正确,没有特殊字符,并且文件确实存在。当我阅读压缩文本文件时,类似的方式也会起作用。
我可以知道什么是正确的方法吗?
"rb"
不是popen
的有效模式。如果你阅读popen
的手册页,你会看到上面写着:
FILE *popen(const char *command, const char *type);
[…]
type
参数是指向以null结尾的字符串的指针,该字符串必须包含用于读取的字母'r'
或用于写入的字母'w'
。[…]
如果您查看fopen
的POSIX文档,它会说(关于模式字符串(:
字符
'b'
不应产生任何影响,但允许符合ISO C标准。
因此,在POSIX-ish系统(如Linux(上,打开文件时不需要指定二进制模式,尤其是在使用popen
时。从popen
返回的任何FILE*
都将始终以二进制模式打开。
如果您决定使用zlib而不是popen("zcat", ...)
(正如其他人所建议的,我可能会建议的那样(,有很多好的文档,我个人认为zpipe.c
演示非常有用。
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- C++单个生成文件多个二进制文件
- 尝试将数字写入二进制文件时引发异常
- C++中读/写二进制文件
- 霍夫曼压缩读取文件不会复制二进制文件c++中的所有字节
- 在C++中读取压缩的二进制文件
- 压缩二进制文件