社区
C++ 语言
帖子详情
如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
zhangmj10
2012-03-05 03:01:12
如题;
如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
...全文
2401
16
打赏
收藏
如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
如题; 如何用C++直接读取压缩包文件中的内容(不解压),哪位能用易懂的语言介绍一下原理,顺便再给出一个算法,谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
我记得一款漫画软件可以直接读取压缩包的漫画的 可是我觉得还是得临时解压
各种
语言
【Python,Java,Go,Pascal,
C++
】不
解压
直接
读取
压缩包
【rar,zip,7z,gz,tar,z...】
中
文本行
为了节省磁盘,增加效率。不用解开压缩
文件
,而是
直接
读取
里面的
内容
。 不能调用外部的命令,还得兼顾跨平台,各种
语言
实现的方式都不太一样。 最好的方式是Java的流式处理,当然Go也不错,Python最简练。而C/
C++
除了zlib也不知道别的方式,支持的格式还挺少。
基于Zlib实现的从ZIP
文件
中
提取
文件
数据
前言:呃,今天上来翻了翻之前写的文章,其
中
访问率最高的是那个『自绘RadioButton』,有好多人留言让我发源代码,这,也是自己懒惰,现在已经把源代码的连接补到文章最后,也是CSDN的下载,希望对某些人有帮助吧,呵呵。看着之前自己写的东西还挺有意思的,特别是那个用JAVA做的地图编辑器的学习版,其实是到后面写不下去了,觉得越想越复杂。其实自己最近闲暇时分用MFC写了个『Descent: Jour
关于
文件
路径的反斜杠正斜杠和双斜杠问题
标签:c
文件
路径绝对路径相对路径斜杠it 分类:C 和OpenCV 1 C
文件
路径为什么要用双斜杠 因为 \ 在 C/
C++
/C#
中
是转义前导字符,例如 \n 代表换行。 如果路径
中
刚好有类似转义字符开头的,那么就会引起问题,所以路径
中
的 \ 必须用 \\ 的形式。 2 Windows的路径
中
表示
文件
层级为什么会用反斜杠「\」,而UNIX系统都用斜杠「/」? Windo...
Log4cpp
介绍
及使用
Log4cpp是
一个
开源的
C++
类库,它提供了在
C++
程序
中
使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、
文件
、回滚
文件
、调试器、Windows日志、本地syslog和远程syslog服务器
中
。 1、Log4cpp简介 Log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一致。
log4cpp
介绍
以及使用
Log4cpp是
一个
开源的
C++
类库,它提供了在
C++
程序
中
使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、
文件
、回滚
文件
、调试器、Windows日志、本地syslog和远程syslog服务器
中
。 1、Log4cpp简介 Log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一
C++ 语言
65,189
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章