unrar.dll使用说明
作者:互联网
原文链接:http://www.cnblogs.com/c1230v/articles/1669660.html
unrar - unrar.dll - DLL文件信息
DLL 文件: unrar 或者 unrar.dll
DLL 名称: UnRAR dynamic library for Windows software developers
描述:
unrar.dll是RAR压缩包解压相关文件。
属于: UnRAR
系统 DLL文件: 否
常见错误: File Not Found, Missing File, Exception Errors
安全等级 (0-5): 0
间谍软件: 否
广告软件: 否
UnRAR.dll 说明
~~~~~~~~~~~~~~~~ UnRAR.dll 是一个32位windows的动态链接库,它可以用来解压缩RAR压缩包。
导出函数
====================================================================
HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData)
====================================================================
作用
~~~~
打开Rar文件并为使用的结构体分配空间
参数
~~~~
ArchiveData 指向 RAROpenArchiveData 这个结构体
struct RAROpenArchiveData
{
char *ArcName;
UINT OpenMode;
UINT OpenResult;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};
结构体中各项含义
ArcName
压缩包名称,以'\0'作为结尾的字符串
OpenMode
输入参数
可能值
RAR_OM_LIST 只为读取文件头而打开压缩包
RAR_OM_EXTRACT 为检测或者解压缩而打开压缩包
输出结果
输出参数
取值范围
0 成功
ERAR_NO_MEMORY 内存不足,无法初始化数据结构的
ERAR_BAD_DATA 压缩包头损坏
ERAR_BAD_ARCHIVE 不是有效的Rar压缩包
ERAR_UNKNOWN_FORMAT 无法识别的压缩方式
ERAR_EOPEN 打开压缩包错误
CmtBuf
输入参数,指向一个用来存放注释的缓冲区。最大的注释长度为64KB。
注释是以0结尾的字符串。如果注释文本的长度超过缓冲区大小,注释
文本将被截断。如果 CmtBuf 为 null,将不会读取注释。
CmtBufSize
输入参数。给出注释缓冲区的大小。
CmtSize
输出参数,给出读取到缓冲区的实际注释大小,不能超过CmtBufSize。
CmtState
输出参数
可能值
0 注释不存在
1 注释读取完毕
ERAR_NO_MEMORY 内存不足,无法释放注释
ERAR_BAD_DATA 注释损坏
ERAR_UNKNOWN_FORMAT 注释格式无效
ERAR_SMALL_BUF 缓冲区过小,无法读取全部注释
返回值
~~~~~~
返回压缩包文件的 handle ,出错时返回 null
========================================================================
HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData)
========================================================================
说明
~~~~
同RAROpenArchive,类似,但是RAROpenArchiveDataEx允许指定 unicde的文件名,并可以返回文件标志
参数
~~~~
ArchiveData 指向 RAROpenArchiveData 这个结构体
struct RAROpenArchiveDataEx
{
char *ArcName;
wchar_t *ArcNameW;
unsigned int OpenMode;
unsigned int OpenResult;
char *CmtBuf;
unsigned int CmtBufSize;
unsigned int CmtSize;
unsigned int CmtState;
unsigned int Flags;
unsigned int Reserved[32];
};
Structure fields:
ArcNameW
压缩包名称,以'\0'作为结尾的Unicode编码的字符串或者是Null
标志
输出参数。由以下位表示构成
Possible values
可能值
0x0001 - Volume attribute (archive volume) 卷属性 ()
0x0002 - Archive comment present 压缩包有注视
0x0004 - Archive lock attribute 压缩包锁定
0x0008 - Solid attribute (solid archive) 固实压缩包
0x0010 - New volume naming scheme ('volname.partN.rar') 新的卷名称('volname.partN.rar')
0x0020 - Authenticity information present 存在用户身份校验信息
0x0040 - Recovery record present 存在恢复记录
0x0080 - Block headers are encrypted 块头已经加密
0x0100 - First volume (set only by RAR 3.0 and later) 第一个卷
Reserved[32]
Reserved for future use. Must be zero.
Information on other structure fields and function return values
is available above, in RAROpenArchive function 说明.
====================================================================
int PASCAL RARCloseArchive(HANDLE hArcData)
====================================================================
说明
~~~~
关闭打开的压缩包并释放分配的内存。只有当处理压缩文件的过程结束后才可以调用这个
过程,如果处理压缩文件的过程只是停止,使用这个过程将会引起错误
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包文件的句柄
返回值
~~~~~~
0 成功
ERAR_ECLOSE 关闭压缩文件时发生错误
====================================================================
int PASCAL RARReadHeader(HANDLE hArcData,
struct RARHeaderData *HeaderData)
====================================================================
说明
~~~~
读取压缩包的头部。
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包的句柄。
HeaderData
指向RARHeaderData 结构
struct RARHeaderData
{
char ArcName[260];
char FileName[260];
UINT Flags;
UINT PackSize;
UINT UnpSize;
UINT HostOS;
UINT FileCRC;
UINT FileTime;
UINT UnpVer;
UINT Method;
UINT FileAttr;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};
结构体各个域:
ArcName
输出压缩文件名,以0结束的字符串。 也可以是当前卷名称。
FileName
输出以0结束的字符串的文件名,以OEM (DOS)编码方式给出。
Flags
输出文件标志
0x01 - file continued from previous volume 前述卷的继续
0x02 - file continued on next volume 下一个卷还有该文件的部分
0x04 - file encrypted with password 文件已加密
0x08 - file comment present 文件存在注释
0x10 - compression of previous files is used (solid flag) 此文件压缩同前面的文件有关(固实标志)
bits 7 6 5
0 0 0 - 目录大小为 64 Kb
0 0 1 - 目录大小为 128 Kb
0 1 0 - 目录大小为 256 Kb
0 1 1 - 目录大小为 512 Kb
1 0 0 - 目录大小为 1024 Kb
1 0 1 - 目录大小为 2048 KB
1 1 0 - 目录大小为 4096 KB
1 1 1 - 文件就是目录
其余字节保留
PackSize
输出压缩文件的分包大小或者文件切割大小
UnpSize
输出解压缩后文件的大小
HostOS
输出压缩文件的宿主操作系统
0 - MS DOS;
1 - OS/2.
2 - Win32
3 - Unix
FileCRC
输出压缩之前文件的CRC值。如果文件被分割到不同的卷中,将不会在卷中给出。(后面这段话意思好像是说,如果你将一个文件压缩到多个包中,每个分卷包不会存放部分文件的CRC。我试验切割一个文件到几个卷,然后将其中的几个卷拷贝到其他目录再使用WinRar打开,发现其中CRC值不同。)
FileTime
输出参数 按照MS DOS格式输出的日期和时间
UnpVer
输出解压需要的Rar版本。按照10 * Major version + minor version格式给出
Method
输出压缩方式
FileAttr
输出文件属性
CmtBuf
文件注释,目前在这个版本的Dll还没有实现,CmtState 始终为0
/*
* Input parameter which should point to the buffer for file
* comments. Maximum comment size is limited to 64Kb. Comment text is
* a zero terminated string in OEM encoding. If the comment text is
* larger than the buffer size, the comment text will be truncated.
* If CmtBuf is set to NULL, comments will not be read.
*/
CmtBufSize
Input parameter which should contain size of buffer for archive
comments.
CmtSize
Output parameter containing size of comments actually read into the
buffer, should not exceed CmtBufSize.
CmtState
Output parameter.
Possible values
0 Absent comments
1 Comments read completely
ERAR_NO_MEMORY Not enough memory to extract comments
ERAR_BAD_DATA Broken comment
ERAR_UNKNOWN_FORMAT Unknown comment format
ERAR_SMALL_BUF Buffer too small, comments not completely read
Return values
~~~~~~~~~~~~~
0 Success
ERAR_END_ARCHIVE End of archive
ERAR_BAD_DATA File header broken
====================================================================
int PASCAL RARReadHeaderEx(HANDLE hArcData,
struct RARHeaderDataEx *HeaderData)
====================================================================
说明
~~~~
同 RARReadHeader 类似,不同之处在于使用 RARHeaderDataEx 结构体,其中包括 Unicode文件名和64位长的文件大小。
struct RARHeaderDataEx
{
char ArcName[1024];
wchar_t ArcNameW[1024];
char FileName[1024];
wchar_t FileNameW[1024];
unsigned int Flags;
unsigned int PackSize;
unsigned int PackSizeHigh;
unsigned int UnpSize;
unsigned int UnpSizeHigh;
unsigned int HostOS;
unsigned int FileCRC;
unsigned int FileTime;
unsigned int UnpVer;
unsigned int Method;
unsigned int FileAttr;
char *CmtBuf;
unsigned int CmtBufSize;
unsigned int CmtSize;
unsigned int CmtState;
unsigned int Reserved[1024];
};
====================================================================
int PASCAL RARProcessFile(HANDLE hArcData,
int Operation,
char *DestPath,
char *DestName)
====================================================================
说明 描述
~~~~~~~~~~~
执行动作,然后指向下一个文件。根据 RAR_OM_EXTRACT 确定释放还是测试
当前文件。如果设置了 RAR_OM_LIST 给出模式,那么调用这个函数将会忽略当前文件直接指向下一个文件。
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包的句柄。
Operation
文件操作
RAR_SKIP 指向压缩包中的下一个文件。如果压缩包是固定, 并且RAR_OM_EXTRACT 已经设置,那么会处理当前
文件---操作比简单的查找要慢。
RAR_TEST 检测当前文件,然后移动到压缩包中的下一个文件
。如果 RAR_OM_LIST 已经设置了打开模式,
那么操作同RAR_SKIP一样。
RAR_EXTRACT 解压当前文件,然后指向下一个文件,如果
RAR_OM_LIST 已经设置了打开模式,那么操作同RAR_SKIP一样。
DestPath
输入解压文件的目录,这是一个以0结尾的字符串。如果 DestPath
为null,表示解压到当前目录下。只有DestName 为null时,这个参数
才有意义。
DestName
这个参数指向一个包含完整路径和名称的以0结尾的字符串,默认
为null.如果 DestName 有定义(也就是不是 Null)将会用它来替换压缩包中的原始
文件名和路径。
DestPath 和 DestName都必须按照 OEM 方式编码。如果必要,可以使用CharToOem 将 文本将参数转化为OEM方式供给这个函数调用。
返回值
~~~~~~
0 成功
ERAR_BAD_DATA 文件CRC错误
ERAR_BAD_ARCHIVE 卷不是有效的Rar文件
ERAR_UNKNOWN_FORMAT 未知的格式
ERAR_EOPEN 卷打开错误
ERAR_ECREATE 文件建立错误
ERAR_ECLOSE 文件关闭错误
ERAR_EREAD 读取错误
ERAR_EWRITE 写入错误
注意:如果你希望放弃解当前的解压缩操作,请在处理 UCM_PROCESSDATA
回调函数,返回-1。
====================================================================
int PASCAL RARProcessFileW(HANDLE hArcData,
int Operation,
wchar_t *DestPath,
wchar_t *DestName)
====================================================================
说明
~~~~
Unicode版本的 RARProcessFile 。它使用 Unicode 编码的 DestPath
和 DestName 参数,其余的参数和返回值都同RARProcessFile中的一样。
====================================================================
void PASCAL RARSetCallback(HANDLE hArcData,
int PASCAL (*CallbackProc)(UINT msg,LONG UserData,LONG P1,LONG P2),
LONG UserData);
====================================================================
说明
~~~~
这是一个用户定义的回调函数用来处理unrar事件
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包文件的句柄
CallbackProc
指向一个用户定义的回调函数
函数传送4个参数
msg 事件类型,下面会详述
UserData 用户定义传送给 RARSetCallback 的值
P1 and P2 事件相关参数下面会详述
可能的事件
UCM_CHANGEVOLUME 处理卷改变
P1 指向下一个卷的名称,字符串以0结尾
P2 函数调用模式
RAR_VOL_ASK Required volume is absent. The function should
prompt user and return a positive value
to retry or return -1 value to terminate
operation. The function may also specify a new
volume name, placing it to the address specified
by P1 parameter.
RAR_VOL_NOTIFY 成功打开需求的卷。这是一个通知消息,
不允许改变卷名称。函数返回一个正数将
继续,或者-1将停止操作。
UCM_PROCESSDATA 处理解压数据。用来在不解压额外的文件的
情况下直接读取压缩包中的一个文件。返回正数继续,或者返回-1放弃操作
P1 指向解压缩数据的地址。函数可以读取这些
数据,但是不可以改变它。
P2 解压缩数据的大小。需要注意,目录大小不能
超过支持的最大目录的大小(Rar 3.0中,最大为4MB)
UCM_NEEDPASSWORD DLL needs a password to process archive.
This message must be processed if you wish
to be able to handle archives with encrypted
file names.
DLL需要密码继续操作。当年你需要处理内部文件名也加密了的压缩包时必须处理。 It can be also used as replacementof RARSetPassword function even for usualencrypted files with non-encrypted names.
P1 指向密码缓冲的地址。你需要将密码放在这里
P2 密码缓冲的大小
UserData
用户传送给回调函数的参数
其余的UnRAR.dll中的函数不应该从回调函数中调用
返回值
~~~~~~
无
====================================================================
void PASCAL RARSetChangeVolProc(HANDLE hArcData,
int PASCAL (*ChangeVolProc)(char *ArcName,int Mode));
====================================================================
绝对函数,使用 RARSetCallback 替换
====================================================================
void PASCAL RARSetProcessDataProc(HANDLE hArcData,
int PASCAL (*ProcessDataProc)(unsigned char *Addr,int Size))
====================================================================
绝对函数,使用 RARSetCallback 替换
====================================================================
void PASCAL RARSetPassword(HANDLE hArcData,
char *Password);
====================================================================
说明
~~~~
给未加密的压缩包上设置一个密码
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包文件的句柄
Password
指向以0为结尾的密码字符串
返回值
~~~~~~
无
====================================================================
void PASCAL RARGetDllVersion();
====================================================================
说明
~~~~
返回 API 版本
参数
~~~~
无
返回值
~~~~~~
返回当前UnRar.DLL中API的版本,在 unrar.h 中由 RAR_DLL_VERSION 定义。只有当 UnRar.DLL中的API升级时,才会提高版本号。不要将这个版本同UnRar.Dll的编译版本弄混,编译版本在每一次编译的时候都会变化。
如果 RARGetDllVersion() 返回值低于你软件需要的版本,就表示你使用的DLL版本太低。
在老的Unrar.dll中没有提供这个功能,所以最好在使用时要先用LoadLibrary 和 GetProcAddress 检查一下是否有这个功能。
注释: 来自WinRar中文版的帮助文件
固实压缩文件:
固实压缩文件是 RAR 的一种特殊压缩方式存储的压缩文件,它把压缩文件中的全部文件都当成一个连续数据流来看待。固实压缩文件只支持 RAR 格式的压缩文件,ZIP 压缩文件永远是非固实的。RAR 的压缩文件可由用户决定选择固实或非固实的压缩方式。
固实压缩可增加压缩性能,特别是在添加大量的小文件的时候,但它也有一些重要的不利因素:
对已存在的固实压缩文件更新时较慢;
要从固实的压缩文件解压单个文件时,它之前的文件都需先经过分析。这造成当从固实的压缩文件内取出文件时会比一般压缩文件取出文件慢一些。但是,当从固实的压缩文件解压全部的文件时,解压速度并没有影响。
如果在固实压缩文件中的任何文件损坏了,要从损坏的范围中解压全部的文件是不可能的。因此,如果固实压缩文件是保存在例如软盘等媒介时,推荐你在制作时使用 恢复记录。
固实压缩方式适用场合为:
压缩文件很少更新的时候;
不需要经常从压缩文件中解压一个文件或是部分文件的时候;
压缩效率比压缩速度更为重要的时候。
通常文件在固实压缩时是以扩展名做排序的,但也可以使用特殊文件来设置替代的文件顺序。文件名是 rarfiles.lst。
锁定压缩文件
RAR 压缩文件格式 支持压缩文件的锁定。锁定的压缩文件是不能用 WinRAR 来修改的。 你可以锁定重要的压缩文件以防止它们被意外的更改。
在 WinRAR 图形界面模式使用“锁定压缩文件”命令或者在命令行中使用 命令“K” 均可锁定一个压缩文件。
DLL 文件: unrar 或者 unrar.dll
DLL 名称: UnRAR dynamic library for Windows software developers
描述:
unrar.dll是RAR压缩包解压相关文件。
属于: UnRAR
系统 DLL文件: 否
常见错误: File Not Found, Missing File, Exception Errors
安全等级 (0-5): 0
间谍软件: 否
广告软件: 否
UnRAR.dll 说明
~~~~~~~~~~~~~~~~ UnRAR.dll 是一个32位windows的动态链接库,它可以用来解压缩RAR压缩包。
导出函数
====================================================================
HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData)
====================================================================
作用
~~~~
打开Rar文件并为使用的结构体分配空间
参数
~~~~
ArchiveData 指向 RAROpenArchiveData 这个结构体
struct RAROpenArchiveData
{
char *ArcName;
UINT OpenMode;
UINT OpenResult;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};
结构体中各项含义
ArcName
压缩包名称,以'\0'作为结尾的字符串
OpenMode
输入参数
可能值
RAR_OM_LIST 只为读取文件头而打开压缩包
RAR_OM_EXTRACT 为检测或者解压缩而打开压缩包
输出结果
输出参数
取值范围
0 成功
ERAR_NO_MEMORY 内存不足,无法初始化数据结构的
ERAR_BAD_DATA 压缩包头损坏
ERAR_BAD_ARCHIVE 不是有效的Rar压缩包
ERAR_UNKNOWN_FORMAT 无法识别的压缩方式
ERAR_EOPEN 打开压缩包错误
CmtBuf
输入参数,指向一个用来存放注释的缓冲区。最大的注释长度为64KB。
注释是以0结尾的字符串。如果注释文本的长度超过缓冲区大小,注释
文本将被截断。如果 CmtBuf 为 null,将不会读取注释。
CmtBufSize
输入参数。给出注释缓冲区的大小。
CmtSize
输出参数,给出读取到缓冲区的实际注释大小,不能超过CmtBufSize。
CmtState
输出参数
可能值
0 注释不存在
1 注释读取完毕
ERAR_NO_MEMORY 内存不足,无法释放注释
ERAR_BAD_DATA 注释损坏
ERAR_UNKNOWN_FORMAT 注释格式无效
ERAR_SMALL_BUF 缓冲区过小,无法读取全部注释
返回值
~~~~~~
返回压缩包文件的 handle ,出错时返回 null
========================================================================
HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData)
========================================================================
说明
~~~~
同RAROpenArchive,类似,但是RAROpenArchiveDataEx允许指定 unicde的文件名,并可以返回文件标志
参数
~~~~
ArchiveData 指向 RAROpenArchiveData 这个结构体
struct RAROpenArchiveDataEx
{
char *ArcName;
wchar_t *ArcNameW;
unsigned int OpenMode;
unsigned int OpenResult;
char *CmtBuf;
unsigned int CmtBufSize;
unsigned int CmtSize;
unsigned int CmtState;
unsigned int Flags;
unsigned int Reserved[32];
};
Structure fields:
ArcNameW
压缩包名称,以'\0'作为结尾的Unicode编码的字符串或者是Null
标志
输出参数。由以下位表示构成
Possible values
可能值
0x0001 - Volume attribute (archive volume) 卷属性 ()
0x0002 - Archive comment present 压缩包有注视
0x0004 - Archive lock attribute 压缩包锁定
0x0008 - Solid attribute (solid archive) 固实压缩包
0x0010 - New volume naming scheme ('volname.partN.rar') 新的卷名称('volname.partN.rar')
0x0020 - Authenticity information present 存在用户身份校验信息
0x0040 - Recovery record present 存在恢复记录
0x0080 - Block headers are encrypted 块头已经加密
0x0100 - First volume (set only by RAR 3.0 and later) 第一个卷
Reserved[32]
Reserved for future use. Must be zero.
Information on other structure fields and function return values
is available above, in RAROpenArchive function 说明.
====================================================================
int PASCAL RARCloseArchive(HANDLE hArcData)
====================================================================
说明
~~~~
关闭打开的压缩包并释放分配的内存。只有当处理压缩文件的过程结束后才可以调用这个
过程,如果处理压缩文件的过程只是停止,使用这个过程将会引起错误
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包文件的句柄
返回值
~~~~~~
0 成功
ERAR_ECLOSE 关闭压缩文件时发生错误
====================================================================
int PASCAL RARReadHeader(HANDLE hArcData,
struct RARHeaderData *HeaderData)
====================================================================
说明
~~~~
读取压缩包的头部。
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包的句柄。
HeaderData
指向RARHeaderData 结构
struct RARHeaderData
{
char ArcName[260];
char FileName[260];
UINT Flags;
UINT PackSize;
UINT UnpSize;
UINT HostOS;
UINT FileCRC;
UINT FileTime;
UINT UnpVer;
UINT Method;
UINT FileAttr;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};
结构体各个域:
ArcName
输出压缩文件名,以0结束的字符串。 也可以是当前卷名称。
FileName
输出以0结束的字符串的文件名,以OEM (DOS)编码方式给出。
Flags
输出文件标志
0x01 - file continued from previous volume 前述卷的继续
0x02 - file continued on next volume 下一个卷还有该文件的部分
0x04 - file encrypted with password 文件已加密
0x08 - file comment present 文件存在注释
0x10 - compression of previous files is used (solid flag) 此文件压缩同前面的文件有关(固实标志)
bits 7 6 5
0 0 0 - 目录大小为 64 Kb
0 0 1 - 目录大小为 128 Kb
0 1 0 - 目录大小为 256 Kb
0 1 1 - 目录大小为 512 Kb
1 0 0 - 目录大小为 1024 Kb
1 0 1 - 目录大小为 2048 KB
1 1 0 - 目录大小为 4096 KB
1 1 1 - 文件就是目录
其余字节保留
PackSize
输出压缩文件的分包大小或者文件切割大小
UnpSize
输出解压缩后文件的大小
HostOS
输出压缩文件的宿主操作系统
0 - MS DOS;
1 - OS/2.
2 - Win32
3 - Unix
FileCRC
输出压缩之前文件的CRC值。如果文件被分割到不同的卷中,将不会在卷中给出。(后面这段话意思好像是说,如果你将一个文件压缩到多个包中,每个分卷包不会存放部分文件的CRC。我试验切割一个文件到几个卷,然后将其中的几个卷拷贝到其他目录再使用WinRar打开,发现其中CRC值不同。)
FileTime
输出参数 按照MS DOS格式输出的日期和时间
UnpVer
输出解压需要的Rar版本。按照10 * Major version + minor version格式给出
Method
输出压缩方式
FileAttr
输出文件属性
CmtBuf
文件注释,目前在这个版本的Dll还没有实现,CmtState 始终为0
/*
* Input parameter which should point to the buffer for file
* comments. Maximum comment size is limited to 64Kb. Comment text is
* a zero terminated string in OEM encoding. If the comment text is
* larger than the buffer size, the comment text will be truncated.
* If CmtBuf is set to NULL, comments will not be read.
*/
CmtBufSize
Input parameter which should contain size of buffer for archive
comments.
CmtSize
Output parameter containing size of comments actually read into the
buffer, should not exceed CmtBufSize.
CmtState
Output parameter.
Possible values
0 Absent comments
1 Comments read completely
ERAR_NO_MEMORY Not enough memory to extract comments
ERAR_BAD_DATA Broken comment
ERAR_UNKNOWN_FORMAT Unknown comment format
ERAR_SMALL_BUF Buffer too small, comments not completely read
Return values
~~~~~~~~~~~~~
0 Success
ERAR_END_ARCHIVE End of archive
ERAR_BAD_DATA File header broken
====================================================================
int PASCAL RARReadHeaderEx(HANDLE hArcData,
struct RARHeaderDataEx *HeaderData)
====================================================================
说明
~~~~
同 RARReadHeader 类似,不同之处在于使用 RARHeaderDataEx 结构体,其中包括 Unicode文件名和64位长的文件大小。
struct RARHeaderDataEx
{
char ArcName[1024];
wchar_t ArcNameW[1024];
char FileName[1024];
wchar_t FileNameW[1024];
unsigned int Flags;
unsigned int PackSize;
unsigned int PackSizeHigh;
unsigned int UnpSize;
unsigned int UnpSizeHigh;
unsigned int HostOS;
unsigned int FileCRC;
unsigned int FileTime;
unsigned int UnpVer;
unsigned int Method;
unsigned int FileAttr;
char *CmtBuf;
unsigned int CmtBufSize;
unsigned int CmtSize;
unsigned int CmtState;
unsigned int Reserved[1024];
};
====================================================================
int PASCAL RARProcessFile(HANDLE hArcData,
int Operation,
char *DestPath,
char *DestName)
====================================================================
说明 描述
~~~~~~~~~~~
执行动作,然后指向下一个文件。根据 RAR_OM_EXTRACT 确定释放还是测试
当前文件。如果设置了 RAR_OM_LIST 给出模式,那么调用这个函数将会忽略当前文件直接指向下一个文件。
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包的句柄。
Operation
文件操作
RAR_SKIP 指向压缩包中的下一个文件。如果压缩包是固定, 并且RAR_OM_EXTRACT 已经设置,那么会处理当前
文件---操作比简单的查找要慢。
RAR_TEST 检测当前文件,然后移动到压缩包中的下一个文件
。如果 RAR_OM_LIST 已经设置了打开模式,
那么操作同RAR_SKIP一样。
RAR_EXTRACT 解压当前文件,然后指向下一个文件,如果
RAR_OM_LIST 已经设置了打开模式,那么操作同RAR_SKIP一样。
DestPath
输入解压文件的目录,这是一个以0结尾的字符串。如果 DestPath
为null,表示解压到当前目录下。只有DestName 为null时,这个参数
才有意义。
DestName
这个参数指向一个包含完整路径和名称的以0结尾的字符串,默认
为null.如果 DestName 有定义(也就是不是 Null)将会用它来替换压缩包中的原始
文件名和路径。
DestPath 和 DestName都必须按照 OEM 方式编码。如果必要,可以使用CharToOem 将 文本将参数转化为OEM方式供给这个函数调用。
返回值
~~~~~~
0 成功
ERAR_BAD_DATA 文件CRC错误
ERAR_BAD_ARCHIVE 卷不是有效的Rar文件
ERAR_UNKNOWN_FORMAT 未知的格式
ERAR_EOPEN 卷打开错误
ERAR_ECREATE 文件建立错误
ERAR_ECLOSE 文件关闭错误
ERAR_EREAD 读取错误
ERAR_EWRITE 写入错误
注意:如果你希望放弃解当前的解压缩操作,请在处理 UCM_PROCESSDATA
回调函数,返回-1。
====================================================================
int PASCAL RARProcessFileW(HANDLE hArcData,
int Operation,
wchar_t *DestPath,
wchar_t *DestName)
====================================================================
说明
~~~~
Unicode版本的 RARProcessFile 。它使用 Unicode 编码的 DestPath
和 DestName 参数,其余的参数和返回值都同RARProcessFile中的一样。
====================================================================
void PASCAL RARSetCallback(HANDLE hArcData,
int PASCAL (*CallbackProc)(UINT msg,LONG UserData,LONG P1,LONG P2),
LONG UserData);
====================================================================
说明
~~~~
这是一个用户定义的回调函数用来处理unrar事件
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包文件的句柄
CallbackProc
指向一个用户定义的回调函数
函数传送4个参数
msg 事件类型,下面会详述
UserData 用户定义传送给 RARSetCallback 的值
P1 and P2 事件相关参数下面会详述
可能的事件
UCM_CHANGEVOLUME 处理卷改变
P1 指向下一个卷的名称,字符串以0结尾
P2 函数调用模式
RAR_VOL_ASK Required volume is absent. The function should
prompt user and return a positive value
to retry or return -1 value to terminate
operation. The function may also specify a new
volume name, placing it to the address specified
by P1 parameter.
RAR_VOL_NOTIFY 成功打开需求的卷。这是一个通知消息,
不允许改变卷名称。函数返回一个正数将
继续,或者-1将停止操作。
UCM_PROCESSDATA 处理解压数据。用来在不解压额外的文件的
情况下直接读取压缩包中的一个文件。返回正数继续,或者返回-1放弃操作
P1 指向解压缩数据的地址。函数可以读取这些
数据,但是不可以改变它。
P2 解压缩数据的大小。需要注意,目录大小不能
超过支持的最大目录的大小(Rar 3.0中,最大为4MB)
UCM_NEEDPASSWORD DLL needs a password to process archive.
This message must be processed if you wish
to be able to handle archives with encrypted
file names.
DLL需要密码继续操作。当年你需要处理内部文件名也加密了的压缩包时必须处理。 It can be also used as replacementof RARSetPassword function even for usualencrypted files with non-encrypted names.
P1 指向密码缓冲的地址。你需要将密码放在这里
P2 密码缓冲的大小
UserData
用户传送给回调函数的参数
其余的UnRAR.dll中的函数不应该从回调函数中调用
返回值
~~~~~~
无
====================================================================
void PASCAL RARSetChangeVolProc(HANDLE hArcData,
int PASCAL (*ChangeVolProc)(char *ArcName,int Mode));
====================================================================
绝对函数,使用 RARSetCallback 替换
====================================================================
void PASCAL RARSetProcessDataProc(HANDLE hArcData,
int PASCAL (*ProcessDataProc)(unsigned char *Addr,int Size))
====================================================================
绝对函数,使用 RARSetCallback 替换
====================================================================
void PASCAL RARSetPassword(HANDLE hArcData,
char *Password);
====================================================================
说明
~~~~
给未加密的压缩包上设置一个密码
参数
~~~~
hArcData
这个参数存放从RAROpenArchive 函数获得的压缩包文件的句柄
Password
指向以0为结尾的密码字符串
返回值
~~~~~~
无
====================================================================
void PASCAL RARGetDllVersion();
====================================================================
说明
~~~~
返回 API 版本
参数
~~~~
无
返回值
~~~~~~
返回当前UnRar.DLL中API的版本,在 unrar.h 中由 RAR_DLL_VERSION 定义。只有当 UnRar.DLL中的API升级时,才会提高版本号。不要将这个版本同UnRar.Dll的编译版本弄混,编译版本在每一次编译的时候都会变化。
如果 RARGetDllVersion() 返回值低于你软件需要的版本,就表示你使用的DLL版本太低。
在老的Unrar.dll中没有提供这个功能,所以最好在使用时要先用LoadLibrary 和 GetProcAddress 检查一下是否有这个功能。
注释: 来自WinRar中文版的帮助文件
固实压缩文件:
固实压缩文件是 RAR 的一种特殊压缩方式存储的压缩文件,它把压缩文件中的全部文件都当成一个连续数据流来看待。固实压缩文件只支持 RAR 格式的压缩文件,ZIP 压缩文件永远是非固实的。RAR 的压缩文件可由用户决定选择固实或非固实的压缩方式。
固实压缩可增加压缩性能,特别是在添加大量的小文件的时候,但它也有一些重要的不利因素:
对已存在的固实压缩文件更新时较慢;
要从固实的压缩文件解压单个文件时,它之前的文件都需先经过分析。这造成当从固实的压缩文件内取出文件时会比一般压缩文件取出文件慢一些。但是,当从固实的压缩文件解压全部的文件时,解压速度并没有影响。
如果在固实压缩文件中的任何文件损坏了,要从损坏的范围中解压全部的文件是不可能的。因此,如果固实压缩文件是保存在例如软盘等媒介时,推荐你在制作时使用 恢复记录。
固实压缩方式适用场合为:
压缩文件很少更新的时候;
不需要经常从压缩文件中解压一个文件或是部分文件的时候;
压缩效率比压缩速度更为重要的时候。
通常文件在固实压缩时是以扩展名做排序的,但也可以使用特殊文件来设置替代的文件顺序。文件名是 rarfiles.lst。
锁定压缩文件
RAR 压缩文件格式 支持压缩文件的锁定。锁定的压缩文件是不能用 WinRAR 来修改的。 你可以锁定重要的压缩文件以防止它们被意外的更改。
在 WinRAR 图形界面模式使用“锁定压缩文件”命令或者在命令行中使用 命令“K” 均可锁定一个压缩文件。
转载于:https://www.cnblogs.com/c1230v/articles/1669660.html
标签:文件,int,unsigned,dll,说明,unrar,ERAR,压缩文件,压缩包 来源: https://blog.csdn.net/weixin_30633507/article/details/99951646