unit zZip;interfaceuses Classes,Windows,IniFiles,Variants, Controls, ComObj, Messages, Forms,
Dialogs, SysUtils,ShellAPI,shlobj,ZLib;type
pass=string[20];type
Tmyzip = class
private
{ private declarations here}
protected
{ protected declarations here }
public
procedure ys_file(infileName, outfileName: string;password:pass;isjm:Boolean;
filetype:string);
function jy_Inifile(infileName: string;password:pass=''):Boolean;
function jy_Regfile(infileName: string;password:pass=''):Boolean;
procedure jm_RegFile(vFile:string;var Target:TMemoryStream
;password:pass;isjm:Boolean);
procedure jm_IniFile(vFile:string;var Target:TMemoryStream;
password:pass;isjm:Boolean);
constructor Create;
destructor Destroy; override;
{ public declarations here }
published
{ published declarations here }
end;implementationuses zPublic;{ Tmyzip }constructor Tmyzip.Create;
begin
inherited Create;
end;procedure Tmyzip.jm_RegFile(vFile:string;var Target:TMemoryStream;
password:pass;isjm:Boolean);
var
tmpstream,inistream:TFileStream;
FileSize:integer;
inifile:TINIFILE;
filename:string;
begin
tmpstream:=TFileStream.Create(vFile,fmOpenread or fmShareExclusive);
try
Target.Seek(0,soFromEnd);
Target.CopyFrom(tmpstream,0);
filename:=ExtractFilePath(paramstr(0))+'tmp.in_';
inifile:=TInifile.Create(filename);
inifile.WriteString('ysFilePath','filename',ExtractFileName(vFile));
inifile.WriteString('PassWordField','password',password);
inifile.WriteInteger('FileSizeField','filesize',Target.Size);
inifile.WriteBool('BlJm','isjm',isjm);
inifile.Free ;//读入 [INI加密压缩信息文件流]
inistream:=TFileStream.Create(filename,fmOpenread or fmShareExclusive);
try
//继续在 [临时加密压缩文件流] 尾部加入 [INI加密压缩信息文件]
inistream.Position :=0;
Target.Seek(0,sofromend);
Target.CopyFrom(inistream,0);
//计算当前 [INI加密压缩信息文件] 的大小
FileSize:=inistream.Size ;
//继续在 [临时加密文件尾部] 加入 [INI加密压缩信息文件] 的SIZE信息
Target.WriteBuffer(FileSize,sizeof(FileSize));
finally
inistream.Free ;
deletefile(filename);
end;
finally
tmpstream.Free;
end;
end;procedure Tmyzip.jm_IniFile(vFile:string;var Target:TMemoryStream;
password:pass;isjm:Boolean);
var
tmpstream,inistream:TFileStream;
FileSize:integer;
inifile:TINIFILE;
filename:string;
begin
tmpstream:=TFileStream.Create(vFile,fmOpenread or fmShareExclusive);
try
Target.Seek(0,soFromEnd);
Target.CopyFrom(tmpstream,0);//取得文件路径 ,生成 [INI加密压缩信息文件]
filename:=ExtractFilePath(paramstr(0))+'tmpinter.in_';
inifile:=TInifile.Create(filename);
inifile.WriteString('ysFilePath','filename',ExtractFileName(vFile));
inifile.WriteString('PassWordField','password',password);
inifile.WriteInteger('FileSizeField','filesize',Target.Size);
...
inifile.WriteString('jmBeginMoney','sBeginMoney',sBeginMoney);
inifile.WriteString('jmBeginDiscount','sBeginDiscount',sBeginDiscount);
inifile.Free ;//读入 [INI加密压缩信息文件流]
inistream:=TFileStream.Create(filename,fmOpenread or fmShareExclusive);
try
inistream.Position :=0;
Target.Seek(0,sofromend);
Target.CopyFrom(inistream,0);
FileSize:=inistream.Size ;
Target.WriteBuffer(FileSize,sizeof(FileSize));
finally
inistream.Free ;
deletefile(filename);
end;
finally
tmpstream.Free;
end;
end;procedure ys_stream(instream, outStream: TStream);
var
ys: TCompressionStream;
begin
inStream.Position := 0;
ys := TCompressionStream.Create(clmax,OutStream); //最大压缩
try
ys.CopyFrom(inStream, 0);
finally
ys.Free;
end;
end;procedure jy_Stream(instream, outStream: TStream);
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;destructor Tmyzip.Destroy;
begin
inherited Destroy;
end;procedure Tmyzip.ys_file(infileName, outfileName: string;password:pass;isjm:Boolean;
filetype:string);
var instream:TMemoryStream; //文件加密后的临时流
outStream: TFileStream; //压缩输出文件流
begin
instream:=TMemoryStream.Create;//创建 [文件加密后的临时流]
if filetype='RegFiles' then
jm_Regfile(infileName,instream,password,isjm)
else
jm_IniFile(infileName,instream,password,isjm); //文件加密
deletefile(infileName);//删除原文件
outStream := TFileStream.create(outFIleName, fmCreate);//创建压缩输出文件流
try
ys_stream(instream,OutStream);//[文件加密后的临时流] 压缩
finally
OutStream.free;
instream.Free ;
end;
end;function Tmyzip.jy_Regfile(infileName: string;password:pass=''):Boolean;
var
inStream,inistream: TFileStream;
outStream:tmemorystream; //临时内存流
inifile:TINIFILE; //临时INI文件
FileSize:integer; //密码文件的SIZE
begin
Result:=True;
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
OutStream.Seek(-sizeof(FileSize),sofromend);//指向存储解码信息的INTEGER型变量位置
OutStream.ReadBuffer(FileSize,sizeof(FileSize));//读入变量信息
OutStream.Seek(-(FileSize+sizeof(FileSize)),sofromend);//指向解码信息位置
inistream.CopyFrom(OutStream,FileSize);//将解码信息读入INI流中
inistream.Free ;//释放INI文件流
inifile:=TINIFILE.Create(ExtractFilePath(paramstr(0))+'tmp.in_');//读入INI文件信息
sCompanyTel:=inifile.ReadString('jmComPanyTel','sComPanyTel','0');
inifile.Free;
finally
deletefile(ExtractFilePath(paramstr(0))+'tmp.in_');
end;
finally
OutStream.free;
end;
finally
inStream.free;
end;
except
Result:=False;
end;
end;function Tmyzip.jy_Inifile(infileName: string;password:pass=''):Boolean;
var
inStream,inistream: TFileStream;
outStream:tmemorystream; //临时内存流
inifile:TINIFILE; //临时INI文件
FileSize:integer; //密码文件的SIZE
begin
Result:=True;
try
inStream := TFileStream.create(inFIleName, fmOpenRead);
try
outStream := tmemorystream.create;
try
jy_stream(insTream,OutStream);//生成临时INI文件
inistream:=TFileStream.create(ExtractFilePath(paramstr(0))+'tmpinter.in_', fmCreate);
try
OutStream.Seek(-sizeof(FileSize),sofromend);//指向存储解码信息的INTEGER型变量位置
OutStream.ReadBuffer(FileSize,sizeof(FileSize));//读入变量信息
OutStream.Seek(-(FileSize+sizeof(FileSize)),sofromend);//指向解码信息位置
inistream.CopyFrom(OutStream,FileSize);//将解码信息读入INI流中
inistream.Free ;//释放INI文件流
inifile:=TINIFILE.Create(ExtractFilePath(paramstr(0))+'tmp.in_');//读入INI文件信息
sBeginMoney:=inifile.ReadString('jmBeginMoney','sBeginMoney','0');
sBeginDiscount:=inifile.ReadString('jmBeginDiscount','sBeginDiscount','0');
inifile.Free;
finally
deletefile(ExtractFilePath(paramstr(0))+'tmpinter.in_');
end;
finally
OutStream.free;
end;
finally
inStream.free;
end;
except
Result:=False;
end;
end;end.
Dialogs, SysUtils,ShellAPI,shlobj,ZLib;type
pass=string[20];type
Tmyzip = class
private
{ private declarations here}
protected
{ protected declarations here }
public
procedure ys_file(infileName, outfileName: string;password:pass;isjm:Boolean;
filetype:string);
function jy_Inifile(infileName: string;password:pass=''):Boolean;
function jy_Regfile(infileName: string;password:pass=''):Boolean;
procedure jm_RegFile(vFile:string;var Target:TMemoryStream
;password:pass;isjm:Boolean);
procedure jm_IniFile(vFile:string;var Target:TMemoryStream;
password:pass;isjm:Boolean);
constructor Create;
destructor Destroy; override;
{ public declarations here }
published
{ published declarations here }
end;implementationuses zPublic;{ Tmyzip }constructor Tmyzip.Create;
begin
inherited Create;
end;procedure Tmyzip.jm_RegFile(vFile:string;var Target:TMemoryStream;
password:pass;isjm:Boolean);
var
tmpstream,inistream:TFileStream;
FileSize:integer;
inifile:TINIFILE;
filename:string;
begin
tmpstream:=TFileStream.Create(vFile,fmOpenread or fmShareExclusive);
try
Target.Seek(0,soFromEnd);
Target.CopyFrom(tmpstream,0);
filename:=ExtractFilePath(paramstr(0))+'tmp.in_';
inifile:=TInifile.Create(filename);
inifile.WriteString('ysFilePath','filename',ExtractFileName(vFile));
inifile.WriteString('PassWordField','password',password);
inifile.WriteInteger('FileSizeField','filesize',Target.Size);
inifile.WriteBool('BlJm','isjm',isjm);
inifile.Free ;//读入 [INI加密压缩信息文件流]
inistream:=TFileStream.Create(filename,fmOpenread or fmShareExclusive);
try
//继续在 [临时加密压缩文件流] 尾部加入 [INI加密压缩信息文件]
inistream.Position :=0;
Target.Seek(0,sofromend);
Target.CopyFrom(inistream,0);
//计算当前 [INI加密压缩信息文件] 的大小
FileSize:=inistream.Size ;
//继续在 [临时加密文件尾部] 加入 [INI加密压缩信息文件] 的SIZE信息
Target.WriteBuffer(FileSize,sizeof(FileSize));
finally
inistream.Free ;
deletefile(filename);
end;
finally
tmpstream.Free;
end;
end;procedure Tmyzip.jm_IniFile(vFile:string;var Target:TMemoryStream;
password:pass;isjm:Boolean);
var
tmpstream,inistream:TFileStream;
FileSize:integer;
inifile:TINIFILE;
filename:string;
begin
tmpstream:=TFileStream.Create(vFile,fmOpenread or fmShareExclusive);
try
Target.Seek(0,soFromEnd);
Target.CopyFrom(tmpstream,0);//取得文件路径 ,生成 [INI加密压缩信息文件]
filename:=ExtractFilePath(paramstr(0))+'tmpinter.in_';
inifile:=TInifile.Create(filename);
inifile.WriteString('ysFilePath','filename',ExtractFileName(vFile));
inifile.WriteString('PassWordField','password',password);
inifile.WriteInteger('FileSizeField','filesize',Target.Size);
...
inifile.WriteString('jmBeginMoney','sBeginMoney',sBeginMoney);
inifile.WriteString('jmBeginDiscount','sBeginDiscount',sBeginDiscount);
inifile.Free ;//读入 [INI加密压缩信息文件流]
inistream:=TFileStream.Create(filename,fmOpenread or fmShareExclusive);
try
inistream.Position :=0;
Target.Seek(0,sofromend);
Target.CopyFrom(inistream,0);
FileSize:=inistream.Size ;
Target.WriteBuffer(FileSize,sizeof(FileSize));
finally
inistream.Free ;
deletefile(filename);
end;
finally
tmpstream.Free;
end;
end;procedure ys_stream(instream, outStream: TStream);
var
ys: TCompressionStream;
begin
inStream.Position := 0;
ys := TCompressionStream.Create(clmax,OutStream); //最大压缩
try
ys.CopyFrom(inStream, 0);
finally
ys.Free;
end;
end;procedure jy_Stream(instream, outStream: TStream);
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;destructor Tmyzip.Destroy;
begin
inherited Destroy;
end;procedure Tmyzip.ys_file(infileName, outfileName: string;password:pass;isjm:Boolean;
filetype:string);
var instream:TMemoryStream; //文件加密后的临时流
outStream: TFileStream; //压缩输出文件流
begin
instream:=TMemoryStream.Create;//创建 [文件加密后的临时流]
if filetype='RegFiles' then
jm_Regfile(infileName,instream,password,isjm)
else
jm_IniFile(infileName,instream,password,isjm); //文件加密
deletefile(infileName);//删除原文件
outStream := TFileStream.create(outFIleName, fmCreate);//创建压缩输出文件流
try
ys_stream(instream,OutStream);//[文件加密后的临时流] 压缩
finally
OutStream.free;
instream.Free ;
end;
end;function Tmyzip.jy_Regfile(infileName: string;password:pass=''):Boolean;
var
inStream,inistream: TFileStream;
outStream:tmemorystream; //临时内存流
inifile:TINIFILE; //临时INI文件
FileSize:integer; //密码文件的SIZE
begin
Result:=True;
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
OutStream.Seek(-sizeof(FileSize),sofromend);//指向存储解码信息的INTEGER型变量位置
OutStream.ReadBuffer(FileSize,sizeof(FileSize));//读入变量信息
OutStream.Seek(-(FileSize+sizeof(FileSize)),sofromend);//指向解码信息位置
inistream.CopyFrom(OutStream,FileSize);//将解码信息读入INI流中
inistream.Free ;//释放INI文件流
inifile:=TINIFILE.Create(ExtractFilePath(paramstr(0))+'tmp.in_');//读入INI文件信息
sCompanyTel:=inifile.ReadString('jmComPanyTel','sComPanyTel','0');
inifile.Free;
finally
deletefile(ExtractFilePath(paramstr(0))+'tmp.in_');
end;
finally
OutStream.free;
end;
finally
inStream.free;
end;
except
Result:=False;
end;
end;function Tmyzip.jy_Inifile(infileName: string;password:pass=''):Boolean;
var
inStream,inistream: TFileStream;
outStream:tmemorystream; //临时内存流
inifile:TINIFILE; //临时INI文件
FileSize:integer; //密码文件的SIZE
begin
Result:=True;
try
inStream := TFileStream.create(inFIleName, fmOpenRead);
try
outStream := tmemorystream.create;
try
jy_stream(insTream,OutStream);//生成临时INI文件
inistream:=TFileStream.create(ExtractFilePath(paramstr(0))+'tmpinter.in_', fmCreate);
try
OutStream.Seek(-sizeof(FileSize),sofromend);//指向存储解码信息的INTEGER型变量位置
OutStream.ReadBuffer(FileSize,sizeof(FileSize));//读入变量信息
OutStream.Seek(-(FileSize+sizeof(FileSize)),sofromend);//指向解码信息位置
inistream.CopyFrom(OutStream,FileSize);//将解码信息读入INI流中
inistream.Free ;//释放INI文件流
inifile:=TINIFILE.Create(ExtractFilePath(paramstr(0))+'tmp.in_');//读入INI文件信息
sBeginMoney:=inifile.ReadString('jmBeginMoney','sBeginMoney','0');
sBeginDiscount:=inifile.ReadString('jmBeginDiscount','sBeginDiscount','0');
inifile.Free;
finally
deletefile(ExtractFilePath(paramstr(0))+'tmpinter.in_');
end;
finally
OutStream.free;
end;
finally
inStream.free;
end;
except
Result:=False;
end;
end;end.
解决方案 »
- 如何将图片逐渐显示出来?
- help:第一行附近语法错误
- 突然发现很多未结的贴子,有点打击积极性哦
- 求助高手! 帮忙说下DELPHI中怎么自定义过程和函数.
- 【板务醒目】辞去 Windows SDK/API 板斑竹职务 3/10【散分醒目】
- 我做了一个安装程序,在客户机上执行此安装程序安装了以后,运行程序,却出现了非法操作、缺少DLL文件等,咋办?
- 株洲茶陵的程序员请进!
- 哪里有INTRAWEB的学习资料啊
- 請問如何將網頁文件(html)保存到自已的數據庫里
- 有关delete函数的问题?
- 高分紧急求助:运行一个程序前判断该程序是否已经运行,如果运行则不再运行!怎样判断??
- 如何取得元件描述信息?
主要问题是在
procedure Tmyzip.ys_file(infileName, outfileName: string;password:pass;isjm:Boolean;
filetype:string);
var instream:TMemoryStream; //文件加密后的临时流
outStream: TFileStream; //压缩输出文件流
begin
instream:=TMemoryStream.Create;//创建 [文件加密后的临时流]
过程,我跟踪到这里的时候原来代码里面instream创建后是有东西的,就是类似一个空的初始化的什么类吧.而我复制出来后发现怎么也执行出来没结果,我跟踪到instream,发现instream创建后为(),真是郁闷请指点.
但有人要动的话删除就说不能执行,公司就要派人去呵呵,很麻烦,于是就加密(或者写注册表).选择加密.请各位看看,这代码哪错了! 或者给个更好的加密方案,最好代码..呵呵.谢谢