用DELPHI实现文件加密压缩(4)
2008-04-11 12:26:57来源:互联网 阅读 ()
else
ys := TCompressionStream.Create(clFastest,OutStream);
end;
try
//压缩流
ys.CopyFrom(inStream, 0);
finally
ys.Free;
end;
end;
//*****************************************************************
//流解压
procedure jy_Stream(instream, outStream: TStream);
{
instream :原压缩流文件
outStream:解压后流文件
}
var
jyl: TDeCompressionStream;
buf: array[1..512] of byte;
sjread: integer;
begin
inStream.Position := 0;
jyl := TDeCompressionStream.Create(inStream);
try
repeat
//读入实际大小
sjRead := jyl.Read(buf, sizeof(buf));
if sjread > 0 then
OutStream.Write(buf, sjRead);
until (sjRead = 0);
finally
jyl.Free;
end;
end;
//**************************************************************
//实现关联注册
procedure Tmyzip.regzzz;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
reg.OpenKey(''''.zzz'''', true);
reg.WriteString('''''''', ''''myzip'''');
reg.CloseKey;
reg.OpenKey(''''myzip\shell\open\command'''', true);
//用于打开.zzz文件的可执行程序
reg.WriteString('''''''', ''''"'''' application.ExeName ''''" "%1"'''');
reg.CloseKey;
reg.OpenKey(''''myzip\DefaultIcon'''',true);
//取当前可执行程序的图标为.zzz文件的图标
reg.WriteString('''''''','''''''' application.ExeName '''',0'''');
reg.Free;
//立即刷新
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
//压缩文件
procedure Tmyzip.ys_file(infileName, outfileName: string;password:pass;isjm:boolean;ysbz:integer);
{
infileName://需要压缩加密的文件
outfileName://压缩加密后产生的文件
password://解压密码
ysbz://压缩标准
}
var
instream:TMemoryStream; //文件加密后的临时流
outStream: TFileStream; //压缩输出文件流
begin
//创建 [文件加密后的临时流]
instream:=TMemoryStream.Create;
//文件加密
jm_file(infileName,instream,password,isjm);
//创建压缩输出文件流
outStream := TFileStream.create(outFIleName, fmCreate);
try
//[文件加密后的临时流] 压缩
ys_stream(instream,OutStream,ysbz);
finally
OutStream.free;
instream.Free ;
end;
end;
//解压文件
function Tmyzip.jy_file(infileName: string;password:pass=''''''''):boolean;
var
inStream,inistream,filestream_ok: TFileStream;
{
instream://解压文件名称
inistream://INI临时文件流
filestream_ok://解压OK的文件
}
outStream:tmemorystream; //临时内存流
inifile:TINIFILE; //临时INI文件
FileSize:integer; //密码文件的SIZE
resultvalue:boolean;//返回值
begin
try
inStream := TFileStream.create(inFIleName, fmOpenRead);
try
outStream := tmemorystream.create;
try
jy_stream(insTream,OutStream);
//生成临时INI文件
inistream:=TFileStream.create(ExtractFilePath(paramstr(0)) ''''tmp.in_'''', fmCreate);
try
//指向存储解码信息的INTEGER型变量位置
OutStream.Seek(-sizeof(FileSize),sofromend);
//读入变量信息
OutStream.ReadBuffer(FileSize,sizeof(FileSize));
//指向解码信息位置
OutStream.Seek(-(FileSize sizeof(FileSize)),sofromend);
//将解码信息读入INI流中
inistream.CopyFrom(OutStream,FileSize);
//释放INI文件流
inistream.Free ;
//读入INI文件信息
inifile:=TINIFILE.Create(ExtractFilePath(paramstr(0)) ''''tmp.in_'''');
resultvalue:=inifile.ReadBool(''''file1'''',''''isjm'''',false);
if resultvalue then
begin
if inifile.ReadString (''''file1'''',''''password'''','''''''')=trim(password) then
resultvalue:=true
else
resultvalue:=false;
end
else
resultvalue:=true;
if resultvalue then
begin
filestream_ok:=TFileStream.create(ExtractFilePath(paramstr(1)) inifile.ReadString(''''file1'''',''''filename'''',''''wnhoo.zzz''''),fmCreate);
try
OutStream.Position :=0;
filestream_ok.CopyFrom(OutStream,inifile.ReadInteger(''''file1'''',''''filesize'''',0));
finally
filestream_ok.Free ;
end;
end;
inifile.Free;
finally
//删除临时INI文件
deletefile(ExtractFilePath(paramstr(0)) ''''tmp.in_'''');
end;
//
finally
OutStream.free;
end;
finally
inStream.free;
end;
except
resultvalue:=false ;
end;
result:=resultvalue;
end;
//自解压创建
procedure tmyzip.zjywj(var filename:string);
var
myRes: TResourceStream;//临时存放自解压EXE文件
myfile:tfilestream;//原文件流
xfilename:string;//临时文件名称
file_ok:tmemorystream; //生成文件的内存流
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
