怎样用Delphi编写解压rar文件 不是调用winrar来实行的,机子没装解压工具也可以解压。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 winrar和其它的压缩软件一样,都使用了自己的特殊算法来压缩,解压,并以这个取得比他人更好的效果,如果你要用自己的程序来实现,首先要搞清楚他的算法,而这个又是这个产品的核心,不如你和作者联系一下看他愿不愿意提供给你? 是不是把 winrar 程序的文件包含在自己的程序下了。这样不要对方安装也可以实现加解压功能 rar的发布中有一个unrar.dll,可以使用它来进行解压。其实,许多的压缩软件对rar的支持都是使用这个dll的 支持楼上的说话!有 Unrar.dll 的接口函数资料吗? 大家一起来研究一下unrar.dll文件吧 终于找到官方的支持资料:http://www.rarlab.com/rar_add.htm或者有用就共享出来。 这是解压的函数:function jieyabao(rarpath, typer, openpath, jiepath: string):integer;//(1) 功 能 : 解压数据包rar文件//(2) 参 数 ://(3) 返回值 : 0 成功 1错误//(4) 作成者 : 撖牛牛//var SUInfo: TStartupInfo; ProcInfo: TProcessInformation; str1:pchar;begin FillChar(SUInfo, SizeOf(SUInfo), 0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; wShowWindow := SW_SHOW; end; str1:=pchar(rarpath+ typer+ openpath +jiepath); if CreateProcess(nil,str1, nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,nil, SUInfo, ProcInfo) then begin // pchar(rarpath+ typer+ openpath +jiepath) WaitForSingleObject(ProcInfo.hProcess, INFINITE); CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); result:=0; end else begin result:=1; end;end; 你在看看winrar 的帮助你就明白了,我写的这个函数其实就是执行了它在DOS下执行命令的过程 关注smlitao982(雷电之音) 上司的代码 急用[email protected] 多谢! 只要把WINRAR自解压的模块加到RAR文件的前面,生成一个文件就可以变成自解压的RAR了。以前的时候用VB做过。 winexce('winrar.exe','[Path]'),直接调用RAR运行不就可以了 如果机器上没装winrar,用系统调用也不能实现呀 看看Delphi的安装目录下Source\Rtl\Common\ZLib.pas里面有什么东东 “如果机器上没装winrar,用系统调用也不能实现呀”笨啊,就一个unrar.dll,你不会拷贝啊,又不用注册的 listview 主窗口的TreeView總在子窗口的前面,如何讓他總顯示在子窗口的後面? 工资问题 (100+200分)求向隐藏程序发送鼠标事件的方法!在线等。。。 有谁研究过cxLookupComboBox,进来看看 急:websnap+ado连接sql2000出错,在线等待帮助 DLL内能否调用另外个DLL里的函数 送分题 关于dbgrid的一个问题,非常急用,请帮忙,谢谢 如何在设计期修改控件的owner? 关于nil 白送分
有 Unrar.dll 的接口函数资料吗?
http://www.rarlab.com/rar_add.htm
或者有用就共享出来。
function jieyabao(rarpath, typer, openpath, jiepath: string):integer;
//(1) 功 能 : 解压数据包rar文件
//(2) 参 数 :
//(3) 返回值 : 0 成功 1错误
//(4) 作成者 : 撖牛牛
//
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
str1:pchar;
begin
FillChar(SUInfo, SizeOf(SUInfo), 0);
with SUInfo do
begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
wShowWindow := SW_SHOW;
end;
str1:=pchar(rarpath+ typer+ openpath +jiepath);
if CreateProcess(nil,str1, nil, nil, False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,nil, SUInfo, ProcInfo) then
begin // pchar(rarpath+ typer+ openpath +jiepath)
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
result:=0;
end else
begin
result:=1;
end;end;
[email protected] 多谢!