vclZip控件的使用
unit UDMPB;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdFTP, StdCtrls, idFTPList, ShellApi, RzPrgres, IniFiles,
VCLUnZip, VCLZip;
//MsgBox
// 信息提示
function MsgBox(Text, Caption: string; Flags: Longint): Integer;
// 系统提示信息
function MsgBoxI(Text: string): Integer;
//警告提示信息
function MsgBoxW(Text: string): Integer;
//Ini
//读INI文件
function IniGetStr(FileName, JName, XName, DefaultValue: string): string;
//写INI文件
function IniSetStr(FileName, JName, XName, WirteValue: string): Boolean;
//File Dir
//拷贝文件
function CopyFileEx(sSou, sTar: string): Boolean;
//拷贝整个文件夹
function CopyDir(const Source, Dest: string): boolean;
//删除整个文年夹
function DeleteDir(const Source: string): boolean;
//zip 用的是 VCLUnZip, VCLZip 控件
//得到所有子目录列表
function GetAllSubDir(Directory: string; var RetList: TStringList): Boolean;
//得到所有子目录文件列表
function GetAllDirFile(Directory: string; var RetList: TStringList): Boolean;
//压缩一个目录
function ZipDir(sDir, sFile: string): Boolean;
//解压一个目录
function UnZipDir(sFile, sDir: string): Boolean;
//常数
const
IniSTVer = 'STVER.INI'; //Stver.ini 程序版本号信息
IniSTUpdate = 'STUpdate.ini'; // STUpdate.ini 连接服务器信息
//变量
var
APATH: string; //程序路径
FTP_Host: string;
FTP_User: string;
FTP_PWD: string;
FTP_Port: Integer;
FTP_SOFTPATH: string;
STVer: string;
STEXE: string;
implementation
//MsgBox>
// 信息提示
function MsgBox(Text, Caption: string; Flags: Longint): Integer;
begin
result := Application.MessageBox(PChar(Text), PChar(Caption), Flags);
end;
// 系统提示信息
function MsgBoxI(Text: string): Integer;
begin
result := Application.MessageBox(PChar(Text), '系统提示', MB_ICONINFORMATION + MB_OK);
end;
//警告提示信息
function MsgBoxW(Text: string): Integer;
begin
result := Application.MessageBox(PChar(Text), '系统提示', MB_ICONWARNING + MB_OK);
end;
//Msgbox<
//ini>
function IniGetStr(FileName, JName, XName, DefaultValue: string): string; //读INI文件
var
IniGetFile: Tinifile;
begin
IniGetStr := '';
IniGetFile := TInifile.Create(FileName);
IniGetStr := IniGetFile.ReadString(JName, XName, DefaultValue);
IniGetFile.Free;
end;
function IniSetStr(FileName, JName, XName, WirteValue: string): Boolean; //写INI文件
var
IniSetFile: Tinifile;
begin
IniSetStr := TRUE;
IniSetFile := TInifile.Create(FileName);
IniSetFile.WriteString(JName, XName, WirteValue);
IniSetFile.Free;
end;
//ini<
//File Dir >
function CopyFileEx(sSou, sTar: string): Boolean;
begin
Result := Copyfile(pchar(sSou), pchar(sTar), True);
end;
function CopyDir(const Source, Dest: string): boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_COPY;
pFrom := PChar(source + #0);
pTo := PChar(Dest + #0);
fFlags := FOF_SILENT + FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR;
hNameMappings := nil;
lpszProgressTitle := '正在复制文件夹';
end;
Result := (SHFileOperation(fo) = 0);
end;
//删除整个文年夹
function DeleteDir(const Source: string): boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_DELETE;
pFrom := PChar(source + #0);
pTo := nil;
fFlags := FOF_SILENT + FOF_NOCONFIRMATION + FOF_NOERRORUI;
// + FOF_ALLOWUNDO 删除到回收站
hNameMappings := nil;
lpszProgressTitle := '正在删除文件夹';
end;
Result := (SHFileOperation(fo) = 0);
end;
//File Dir<
//压缩,解压缩文件>
function GetAllSubDir(Directory: string; var RetList: TStringList): Boolean;
var
SearchRec: TSearchRec;
sTemp: string;
function IsSubDir(SearchRec: TSearchRec): Boolean;
begin
if (SearchRec.Attr = faDirectory) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
Result := True
else
Result := False;
end;
begin
if FindFirst(Directory + '*.*', faAnyFile, SearchRec) = 0 then
begin
repeat //循环直到Until为真
if IsSubDir(SearchRec) then
begin
sTemp := Directory + SearchRec.Name + '/';
RetList.Add(sTemp);
GetAllSubDir(sTemp, RetList); //这是递归部分,查找各子目录。
end;
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
Result := True;
end;
function GetAllDirFile(Directory: string; var RetList: TStringList): Boolean;
var
i: Integer;
DirList: TStringList;
SearchRec: TSearchRec;
begin
Result := False;
DirList := TStringList.Create;
DirList.Add(Directory + '/');
if not GetAllSubDir(Directory + '/', DirList) then exit;
for i := 0 to DirList.Count - 1 do
begin
if FindFirst(DirList.Strings[i] + '*.*', faAnyFile, SearchRec) = 0 then
begin
repeat //循环直到Until为真
if SearchRec.Attr <> faDirectory then
RetList.Add(DirList.Strings[i] + SearchRec.Name);
until (FindNext(SearchRec) <> 0);
end;
end;
if DirList.Count <= 0 then
RetList.Add(Directory);
DirList.Free;
Result := True;
end;
function ZipDir(sDir, sFile: string): Boolean;
var
VCLZip1: TVCLZip;
RetList: TStringList;
begin
Result := True;
VCLZip1 := TVCLZip.Create(nil);
RetList := TStringList.Create;
GetAllDirFile(sDir, RetList);
with VCLZip1 do
begin
FilesList := RetList;
ZipName := sFile;
RelativePaths := True; //相对目录
// StorePaths := True; //存储目录
end;
VCLZIP1.RootDir := SDIR; //根目录
// VCLZip1.Destdir := sDir; //目标目录
// Screen.Cursor := crHourglass;
try
VCLZip1.Zip;
except
Result := False;
end;
// Screen.Cursor := crDefault;
RetList.Free;
VCLZip1.Free;
end;
function UnZipDir(sFile, sDir: string): Boolean;
var
VCLUnZip1: TVCLUnZip;
begin
Result := True;
VCLUnZip1 := TVCLUnZip.Create(nil);
with VCLUnZip1 do
begin
ZipName := sFile;
ReadZip;
Destdir := sDir;
RecreateDirs := True;
FilesList.Add('*.*');
DoAll := True;
OverwriteMode := Always;
end;
// Screen.Cursor := crHourglass;
try
VCLUnZip1.UnZip;
except
Result := False;
end;
//Screen.Cursor := crDefault;
VCLUnZip1.Free;
end;
//压缩,解压缩文件<
end.
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/archive/2008/11/14/2940971.html