Vista에서 Delphi 2009로 디렉토리/파일의 zip 파일 생성 기능
-
06-07-2019 - |
문제
나는 델파이로 압축하고 압축하는 간단한 방법을 찾고 있습니다. 나는 이미 Torry Delphi의 구성 요소를 보았습니다.http://www.torry.net/pages.php?s=99. 그들은 모두 내가 원하는 것을 달성하는 것처럼 보이지만, 그들을 사용하는 것에 대한 몇 가지 단점은 Delphi 2009에서 실행되지 않으며 매우 복잡하여 Delphi 2009에 포트가 어렵다는 것입니다. 그것들은 적어도 나에게는 부족합니다. 많은 DLL을 사용하는 오버 헤드없이 기본 지핑 기능이 필요합니다. 내 퀘스트는 나를 FSCTL_SET_COPRESSION로 이끌었습니다.이 문제는 문제를 해결했을 것이라고 생각했지만 불행히도 이것은 작동하지 않았습니다. CreateFile은 유망한 것처럼 보였습니다. 시도 할 때까지 FSCTL_SET과 동일한 결과를 얻을 수있었습니다. Windows에 기본 지핑 기능이 제한되어 있음을 알고 있습니다. 예를 들어 파일 또는 폴더를 마우스 오른쪽 단추로 클릭하고 선택한 경우 -> sendto-> Zipped Folder를 선택하면 ZIPPER 아카이브가 스마트하게 작성됩니다. 델파이에서 해당 기능에 액세스 할 수 있다면 솔루션이 될 것이라고 생각합니다. 부수적 인 문제에서 Linux는 이와 유사하게 사용할 수있는 고유 한 지핑 기능을 가지고 있습니까?
해결책
Turbopower의 우수한 Abbrevia는 D2009에 다운로드 할 수 있습니다 여기, D2010 지원이 진행 중이며 이미 SVN으로 제공됩니다. 그들의 포럼에 따르면.
Abbrevia는 예전에는 상업용 ($$$) 제품이었으며, 이는 문서가 상당히 완성되었음을 의미합니다.
다른 팁
나는 Zipforge를 사용합니다. D2009로 포팅하는 데 문제가있는 이유는 무엇입니까? 64 비트 때문입니까 ??
다음은 샘플 코드입니다
procedure ZipIt;
var
Archiver: TZipForge;
FileName: String;
begin
try
Archiver:= TZipForge.create(self);
with Archiver do begin
FileName := 'c:\temp\myzip.zip';
// Create a new archive file
OpenArchive(fmCreate);
// Set path to folder with some text files to BaseDir
BaseDir := 'c:\temp\';
// Add all files and directories from 'C:\SOURCE_FOLDER' to the archive
AddFiles('myfiletozip.txt');
// Close the archive
CloseArchive;
end;
finally
Archiver.Free;
end;
end;
Delphi에서 COM을 "수행"할 수 있다면 Windows Shell의 내장 지퍼 기능을 활용할 수 있습니다. 그것은 당신에게 좋은 기본 기능을 제공합니다.
vbscript에서는 다음과 같습니다.
Sub CreateZip(pathToZipFile, dirToZip)
WScript.Echo "Creating zip (" & pathToZipFile & ") from folder (" & dirToZip & ")"
Dim fso
Set fso= Wscript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(pathToZipFile) Then
WScript.Echo "That zip file already exists - deleting it."
fso.DeleteFile pathToZipFile
End If
If Not fso.FolderExists(dirToZip) Then
WScript.Echo "The directory to zip does not exist."
Exit Sub
End If
NewZip pathToZipFile
dim sa
set sa = CreateObject("Shell.Application")
Dim zip
Set zip = sa.NameSpace(pathToZipFile)
WScript.Echo "opening dir (" & dirToZip & ")"
Dim d
Set d = sa.NameSpace(dirToZip)
For Each s In d.items
WScript.Echo s
Next
' http://msdn.microsoft.com/en-us/library/bb787866(VS.85).aspx
' ===============================================================
' 4 = do not display a progress box
' 16 = Respond with "Yes to All" for any dialog box that is displayed.
' 128 = Perform the operation on files only if a wildcard file name (*.*) is specified.
' 256 = Display a progress dialog box but do not show the file names.
' 2048 = Version 4.71. Do not copy the security attributes of the file.
' 4096 = Only operate in the local directory. Don't operate recursively into subdirectories.
WScript.Echo "copying files..."
zip.CopyHere d.items, 4
' wait until finished
sLoop = 0
Do Until d.Items.Count <= zip.Items.Count
Wscript.Sleep(1000)
Loop
End Sub
com은 또한 당신이 사용하기 위해 모든 것을 사용합니다 dotnetzip, 비밀번호 암호 암호화 ZIP, ZIP64, 자체 추출 아카이브, 유니 코드, 스패닝 ZIP 및 기타 것들이있는 무료 다운로드입니다.
개인적으로 저는 D2009와 D2010으로 실행되는 VCL Zip을 완벽하게 사용합니다. 이 게시물 당시에는 120 달러가 소요되지만 매우 간단하고 유연하며 무엇보다도 빠릅니다.
살펴보십시오 vclzip 관심이 있으시면 트레일을 다운로드하십시오
현명한 코드 :
VCLZip1.ZipName := ‘myfiles.zip’;
VCLZip1.FilesList.add(‘c:\mydirectory\*.*’);
VCLZip1.Zip;
기본 지퍼에 필요한 모든 것입니다. 물론 압축 레벨, 디렉토리 구조, 지퍼 스트림, 실선 하락 등을 설정할 수 있습니다.
이것이 도움이되기를 바랍니다.
답장
이것을 살펴보십시오 OpenSource Synzip 장치. Delphi와 함께 배송 된 기본 장치보다 감압이 더 빠르며 더 작은 EXE를 생성합니다 (CRC 테이블은 시작시 생성).
외부 DLL이 필요하지 않습니다. Delphi 6에서 XE까지 작동합니다. 델파이의 유니 코드 버전에는 문제가 없습니다. 모두 단일 장치로.
방금 win-ansi charset뿐만 아니라 유니 코드 숯뿐만 아니라 Zip Content 내에서 유니 코드 파일 이름을 처리하기 위해 몇 가지 변경을했습니다. 피드백을 환영합니다.