如何调用系统的压缩功能?(100分)

  • 主题发起人 主题发起人 strchi
  • 开始时间 开始时间
S

strchi

Unregistered / Unconfirmed
GUEST, unregistred user!
当我用软件生成几个表后,希望把它们压缩到一个文件夹下,请问如何操作?
谢谢指点
 
看一看这个问题对你有没有帮助:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1276435
 
我看了那条,上面的确有,
可是我现在只是打开别人用PB做的文本压缩文件夹,他已经说了是用命令行来调用的,
请问在DELPHI中怎么打开和压缩文件?(最好不用控件)
应用上面一位大哥的话:“在http://www.winzip.com/wzcline.cgi有winzip的命令行工具,下载下来安装好之后就能
直接在程序里直接用Winexec压缩和解压,加上sw_hide可以隐藏Dos窗口,很容易使用的,就
设置几个参数,你试试。”
---我现在想下载,可是下载不了,有些E文我也不清楚,有没有大哥能详细一点告诉小弟?
 
操作系统本身是不带压缩程序的。用winzip的命令行工具还不如用RAR的命令行工具(在安装完
WINRAR后,在WinRAR的目录下的RAR.EXE就是了),现在还有几个人用WinZip,压缩率和WinRAR
没法比,都快被淘汰了。
WinRAR v3.00 Final 汉化注册版:
ttp://61.151.251.199/soft/DOWN/crsky-WinRAR30.exe
(这个安装程序安装后目录下的RAR-E.EXE为英文版的命令行程序,RAR.EXE为汉化的命令行程序)
现在还有正式的中文版,下面的网址上是它官方的中文使用手册:
http://www.eschool.com.cn/document/20010309/2001030916002401.shtml
 
to 楼上
楼主说的操作系统本身的压缩功能是指winxp下的压缩功能吧 。
 
to vinlin:
你想说的是压缩磁盘(在2000,XP中的NTFS分区里可以对目录压缩)吧?你仔细看一看楼主的问题,
恐怕楼主不会是这个意思。
 
我是说我现在做的软件分发的时候简单一些,想问问能不能调用系统的压缩功能,现在知道
系统没有,我也不知道怎么办了?
 
有几个API可用,你可以试试
GetExpandedName 取压缩文件的原文件名
HeapCompact 压缩内存堆
LZCopy 复制文件或压缩
LZInit 初始化压缩数据结构
LZRead 从压缩文件中读入数据


 
3368aa你能不能给我一段代码,
对于这些api,我不知道怎么使用
谢谢
 
看了一些资料,有点启发,大家说,要是写,是不是非得写这么多?
有没有多余的代码?
请指导
procedure TForm1.Button2Click(Sender: TObject);
var
s1,s2:string;
begin
if openDialog1.Execute then
begin
setlength(s1,255);
setlength(s2,255);
s2:=opendialog1.FileName;
GetExpandedName(pchar(s2),pchar(s1));
setlength(s1,strLen(pchar(s1)));
setlength(s1,strLen(pchar(s2)));
memo1.Lines.Add(s1);
memo1.Lines.Add(s2);

end;
end;
 
那位大侠能给我一个
LZRead(从压缩文件中读入数据 )的例子吗?


还有,上面的程序不论是压缩文件还是不是都可以得到返回文件目录,有什么用阿?
 
我等了好久了,请大侠帮个忙,我都快疯了
我编程刚起步,什么都不懂,
能不能举点代码的例子?
 
......
char szFileName[128];
OFSTRUCT ofStrSrc;
OFSTRUCT ofStrDest;
HFILE hfSrcFile,hfDstFile,hfCompFile;
int cbRead;
BYTE buf[512];
//c:/zTest.Tx_是一个经Compress.Exe压缩过的文件
sprintf(szSrc,"%s","C://zTest.Tx_");
hfSrcFile=OpenFile(szSrc,&ofStrSrc,OF_READ);

hfCompFile=LZInit(hfSrcFile);
//获取文件压缩前的名称
GetExpandedName(szSrc,szFileName);
//创建一个新文件,然后将源文件中的内容写到其中
hfDstFile=LZOpenFile(szFileName,&ofStrDest,OF_CREATE);
do{
if((cbRead=LZRead(hfSrcFile,(char*)buf,sizeof(buf)))>0)
_lwrite(hfDstFile,(char*)buf,cbRead);
}while(cbRead==sizeof(buf));

LZClose(hfSrcFile);
LZClose(hfDstFile);
......
 
后退
顶部