手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

用DELPHI实现文件加密压缩

来源:互联网 作者:西部数码 时间:2008-04-11
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

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; //生成文件的内存流

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!