社区
C++ 语言
帖子详情
如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
zhangmj10
2012-03-05 03:01:12
如题;
如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
...全文
2486
16
打赏
收藏
如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
如题; 如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
myiszjf
2013-07-19
打赏
举报
回复
楼主,我也在寻找这方面的资料,也是有这功能需求,有时间可以一起探讨研究啊
yujinhong2012
2012-11-19
打赏
举报
回复
#include "stdafx.h" #include "decode.h" CDecode::CDecode(char *pData,size_t length) { m_index = 0; m_pData = pData; m_length = length; } CDecode::~CDecode() { } CDecode& CDecode::operator >>(bool &value) { size_t size = sizeof(bool); memcpy(&value,m_pData+m_index,size); m_index+=size; return *this; } CDecode& CDecode::operator >>(char &value) { size_t size = sizeof(char); memcpy(&value,m_pData+m_index,size); m_index+=size; return *this; } CDecode& CDecode::operator >>(short &value) { size_t size = sizeof(short); memcpy(&value,m_pData+m_index,size); m_index+=size; return *this; } CDecode& CDecode::operator >>(int &value) { size_t size = sizeof(int); memcpy(&value,m_pData+m_index,size); value = ntohl(value); m_index+=size; return *this; } CDecode& CDecode::operator >>(float &value) { size_t size = sizeof(float); memcpy(&value,m_pData+m_index,size); m_index+=size; return *this; } CDecode& CDecode::operator >>(double &value) { size_t size = sizeof(double); memcpy(&value,m_pData+m_index,size); m_index+=size; return *this; } CDecode& CDecode::operator >>(char *value) { int len; (*this) >>len; memcpy(value,m_pData+m_index,len); value[len] = '\0'; m_index+=len; return *this; } CDecode& CDecode::operator >>(wchar_t &value) { size_t size = sizeof(wchar_t); memcpy(&value,m_pData+m_index,size); value = ntohs(value); m_index+=size; return *this; } CDecode& CDecode::operator >>(wchar_t *value) { int len; (*this)>>len; for(int i=0; i<len; ++i) { *this>>value[i]; } value[len] = '\0'; return *this; } //////////////////////////// #include "stdafx.h" #include "encode.h" CEncode::CEncode(size_t length) { m_pData = new char[length]; memset(m_pData,0,sizeof(char) * length); m_length = length; m_index = 0; } CEncode::~CEncode() { delete[] m_pData; } void CEncode::Resize(size_t length) { // size_t newlen = length+m_index+5; // if (m_length<newlen) // { // char *p = new char[newlen]; // strcpy(p,m_pData); // delete[] m_pData; // m_pData = p; // m_length = newlen; // } } CEncode& CEncode::operator <<(bool value) { size_t size = sizeof(bool); memcpy(&m_pData+m_index,&value,size); m_index+=size; return *this; } CEncode& CEncode::operator <<(char value) { size_t size = sizeof(char); memcpy(m_pData+m_index,&value,size); m_index+=size; return *this; } CEncode& CEncode::operator <<(short value) { size_t size = sizeof(short); memcpy(m_pData+m_index,&value,size); m_index+=size; return *this; } CEncode& CEncode::operator <<(int value) { value = htonl(value); size_t size = sizeof(int); memcpy(m_pData+m_index,&value,size); m_index+=size; return *this; } CEncode& CEncode::operator <<(float value) { size_t size = sizeof(float); memcpy(m_pData+m_index,&value,size); m_index+=size; return *this; } CEncode& CEncode::operator <<(double value) { size_t size = sizeof(double); memcpy(m_pData+m_index,&value,size); m_index+=size; return *this; } CEncode& CEncode::operator <<(const char *value) { int len = strlen(value); (*this) <<len; memcpy(m_pData+m_index,value,len); m_index+=len; return *this; } CEncode& CEncode::operator<<(wchar_t value) { size_t size = sizeof(wchar_t); value = htons(value); memcpy(m_pData+m_index,&value,size); m_index+=size; return *this; } CEncode& CEncode::operator<<(const wchar_t *value) { int len = wcslen(value); //len = 2 * len; //得到的才是字节数.. (*this)<<len; for(int i=0; i<len; ++i) { *this<<value[i]; } return *this; }
zhangmj10
2012-03-05
打赏
举报
回复
[Quote=引用 5 楼 baichi4141 的回复:]
1 了解压缩算法
2 读入文件内容
3 用算法解压缩
4 使用文件
压缩算法有很多很多种
我只实现过一个LZSS算法,这是最简单的算法之一,也很累
如果你没有钻研进去的觉悟,那你还是乖乖解压缩的好
[/Quote]
你的算法能给我参考吗?我的邮箱:zhangmj10@163.com
zhangmj10
2012-03-05
打赏
举报
回复
[Quote=引用 11 楼 baichi4141 的回复:]
我还是那句话,这个问题一点也不简单
“如果你没有钻研进去的觉悟,那你还是乖乖解压缩的好”
顺便,多说一句
为啥非要直接读取而不解压?如果是为了绕过压缩密码那就不用想了。
[/Quote]
我也想直接解压后再。但是现在程序需要这样的功能,直接从zip包里取数据,而不通过压缩(如果每次都去解压的话会变得很麻烦,影响软件的使用)
赵4老师
2012-03-05
打赏
举报
回复
用system函数调用命令行压缩解压软件。
baichi4141
2012-03-05
打赏
举报
回复
我还是那句话,这个问题一点也不简单
“如果你没有钻研进去的觉悟,那你还是乖乖解压缩的好”
顺便,多说一句
为啥非要直接读取而不解压?如果是为了绕过压缩密码那就不用想了。
zhangmj10
2012-03-05
打赏
举报
回复
问题都快被覆盖掉了,回答的人这么少。。。
zhangmj10
2012-03-05
打赏
举报
回复
这个问题不算偏啊,大家来说说哈!
zhangmj10
2012-03-05
打赏
举报
回复
[Quote=引用 7 楼 oldm4n 的回复:]
http://www.info-zip.org/
[/Quote]
....
oldm4n
2012-03-05
打赏
举报
回复
http://www.info-zip.org/
zhangmj10
2012-03-05
打赏
举报
回复
[Quote=引用楼主 zhangmj10 的回复:]
如题;
如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
[/Quote]
补充:我要读取的文件是zip格式的。。。。
baichi4141
2012-03-05
打赏
举报
回复
1 了解压缩算法
2 读入文件内容
3 用算法解压缩
4 使用文件
压缩算法有很多很多种
我只实现过一个LZSS算法,这是最简单的算法之一,也很累
如果你没有钻研进去的觉悟,那你还是乖乖解压缩的好
oldm4n
2012-03-05
打赏
举报
回复
不同压缩包的压缩算法不同,压缩包的文件结构也不一样,这个不是C++能不能的问题,而是你要找到你需要查看的压缩包类型的开发库,然后写代码调用开发库提供的API对压缩包进行操作
如 zip、gz、bzip2、7z、Z、......
bluewanderer
2012-03-05
打赏
举报
回复
你得用对应你压缩包格式的代码读压缩包,zip文件你得用libz读,rar得用unrarlib读,7z得用7z的库读。而且不是所有压缩包都能流式解压其中一个文件的,比如linux下的各种tar.???
zhangmj10
2012-03-05
打赏
举报
回复
我想,fread()函数不知道可以不可以,一点头绪都没有,不知道怎么办。。。
碎炎
2012-03-05
打赏
举报
回复
我记得一款漫画软件可以直接读取压缩包的漫画的 可是我觉得还是得临时解压
基于Zlib实现的从ZIP
文件
中
提取
文件
数据
本文
介绍
了一种从ZIP
压缩包
中
读取
文件
的方法,通过使用Zlib库
中
的minizip代码实现。文
中
提供了详细的实现步骤及关键函数说明,并附带了
C++
与Lua的示例代码。
ubuntu 下 tif(DEM)
文件
转换为opencv Mat 格式
本文
介绍
了在Ubuntu环境下,如何使用
C++
和libtiff库将tif(DEM)
文件
转换为OpenCV的Mat格式。尽管OpenCV可以
直接
读取
tif图像,但对于DEM数据可能会报错。通过libtiff库,文章详细展示了从编译库到处理tile模型的数据,再到转换为cv::Mat和显示结果的完整过程。
基于VisualStudio的Anything to RealCharacters 2.5D引擎
C++
开发
本文详细
介绍
了在Visual Studio 2022环境下配置与开发Anything to RealCharacters 2.5D转真人引擎的完整流程,涵盖硬件准备、
C++
项目构建、OpenCV与ONNX Runtime/TensorRT集成、CUDA/cuDNN GPU加速配置、调试技巧及性能分析方法,聚焦AI图像生成落地
中
的工程化实现环节。
Linux常见指令
介绍
(2)之(echo、less、head、tail、date、cal、find、grep、xargs、zip/unzip、tar、bc、uname、history指令)
本文
介绍
了Linux下的核心命令,如echo、less、head、tail、date、cal、find、grep、xargs、zip/unzip、tar、bc、uname-r等,强调它们在
文件
操作、查找、时间管理及数据处理
中
的关键作用。通过实例和功能详解,展示了Linux指令的实用性和一致性。
使用libjpeg实现windows截图保存成jpeg
文件
【看这一篇就好啦】
本文
介绍
如何在Windows环境下利用libjpeg库截取窗口并保存为JPEG格式图片,包括源码下载、编译步骤、常见问题解决及
C++
示例代码。
C++ 语言
65,212
社区成员
250,516
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章