From: <jfu...@us...> - 2010-03-27 17:10:01
|
Revision: 3215 http://jcl.svn.sourceforge.net/jcl/?rev=3215&view=rev Author: jfudickar Date: 2010-03-27 17:09:54 +0000 (Sat, 27 Mar 2010) Log Message: ----------- Added utitlity function Create7zFile which encapsulate the logic to create a 7z based archive in one line. function Create7zFile(SourceFiles: TStrings; const DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String = ''; OnArchiveProgress: TJclCompressionProgressEvent = nil): Boolean; overload; function Create7zFile(const SourceFile, DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String = ''; OnArchiveProgress: TJclCompressionProgressEvent = nil): Boolean; overload; Modified Paths: -------------- trunk/jcl/source/common/JclCompression.pas Modified: trunk/jcl/source/common/JclCompression.pas =================================================================== --- trunk/jcl/source/common/JclCompression.pas 2010-03-27 17:07:13 UTC (rev 3214) +++ trunk/jcl/source/common/JclCompression.pas 2010-03-27 17:09:54 UTC (rev 3215) @@ -2059,6 +2059,12 @@ procedure GetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); procedure SetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); + +function Create7zFile(SourceFiles: TStrings; const DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String + = ''; OnArchiveProgress: TJclCompressionProgressEvent = nil): Boolean; overload; +function Create7zFile(const SourceFile, DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String = ''; + OnArchiveProgress: TJclCompressionProgressEvent = nil): Boolean; overload; + {$ENDIF MSWINDOWS} {$IFDEF UNITVERSIONING} @@ -5759,6 +5765,69 @@ end; end; +function Create7zFile(SourceFiles: TStrings; const DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String + = ''; OnArchiveProgress: TJclCompressionProgressEvent = nil): Boolean; +var + ArchiveFileName: string; + SourceFile : String; + AFormat: TJclUpdateArchiveClass; + Archive : TJclCompressionArchive; + i: Integer; + InnerList : tStringList; + j: Integer; +begin + Result := False; + ArchiveFileName := DestinationFile; + + AFormat := GetArchiveFormats.FindUpdateFormat(ArchiveFileName); + + if AFormat <> nil then + begin + + if VolumeSize <> 0 then + ArchiveFileName := ArchiveFileName + '.%.3d'; + + Archive := AFormat.Create(ArchiveFileName, VolumeSize, VolumeSize <> 0); + try + Archive.Password := Password; + Archive.OnProgress := OnArchiveProgress; + + InnerList := tStringList.Create; + try + for i := 0 to SourceFiles.Count - 1 do + begin + InnerList.Clear; + BuildFileList(SourceFiles[i], faAnyFile, InnerList, True); + for j := 0 to InnerList.Count - 1 do + begin + SourceFile:=InnerList[j]; + (Archive as TJclCompressArchive).AddFile(ExtractFileName(SourceFile), SourceFile); + Result := True; + end; + end; + finally + InnerList.Free; + end; + (Archive as TJclCompressArchive).Compress; + finally + Archive.Free; + end; + end; +end; + +function Create7zFile(const SourceFile, DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String = ''; + OnArchiveProgress: TJclCompressionProgressEvent = nil): Boolean; +var SourceFiles : TStringList; +begin + SourceFiles := TStringList.Create; + try + SourceFiles.Add(SourceFile); + Result := Create7zFile(SourceFiles, DestinationFile, VolumeSize, Password, OnArchiveProgress); + finally + SourceFiles.Free; + end; +end; + //=== { TJclSevenzipOutputCallback } ========================================= constructor TJclSevenzipUpdateCallback.Create( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |