2009-10-27 6 views
2

나는 델파이로 압축하고 압축하는 간단한 방법을 찾고있다. 나는 이미 torry delphi의 구성 요소를 보았습니다 : http://www.torry.net/pages.php?s=99. 그것들은 모두 내가 원하는 것을 성취하는 것처럼 보이지만 사용하는 데있어서 몇 가지 단점은 델파이 2009에서 실행되는 것은 없으며 매우 복잡하여 델파이 2009로 포팅하기가 어렵습니다. 게다가, 그 (것)들은 희소하다, 잘 적어도 나에. 내가 DLL을 잔뜩 사용하는 오버 헤드없이 기본적인 압축 기능이 필요합니다. 내 퀘스트가 FSCTL_SET_COMPRESSION으로 안내되었지만 문제를 해결했지만 불행히도이 문제는 해결되지 않았습니다. CREATEFILE은 FSCTL_SET과 같은 결과를 얻으려고 시도 할 때까지 유망 해 보였습니다 ... Windows에 제한된 네이티브 압축 기능이 있다는 것을 알고 있습니다. 예를 들어 파일이나 폴더를 마우스 오른쪽 버튼으로 클릭하고 -> sendTo -> zip 폴더를 선택하면 압축 된 아카이브가 현명하게 생성됩니다. 나는 델파이에서 그 기능에 접근 할 수 있었다면 그것은 해결책이 될 것이라고 생각합니다. 부작용으로, 리눅스는 이와 비슷한 사용할 수있는 고유의 zip 함수를 가지고 있습니까?델파이 2009 비스타에서 디렉토리/파일의 zip 파일을 만드는 모든 기능

+1

이 질문은 매우 유사합니다. 유용한 답변을 찾을 수 있습니다. http://stackoverflow.com/questions/1082735/creating-compressed-zipped-folder-using-delphi – Argalatyr

답변

4

TurboPower의 우수한 Abbrevia는 D2009 here에 다운로드 할 수 있으며 D2010 지원이 진행 중이고 이미 svn according to their forum에서 사용할 수 있습니다.

약어는 상업용 ($$$) 제품으로 사용되었으므로 문서가 완전 함을 의미합니다.

0

저는 지핑을 사용합니다. D2009로 이식하는 데 왜 문제가 있습니까? 그것은 64 비트 때문입니까 ?? 당신은 델파이에서 COM을 "할"수 다음 Windows 셸의 내장 압축 기능을 활용할 수 있다면 여기

몇 가지 샘플 코드

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; 
+0

Delphi 2009는 64 비트가 아닙니다. – jpfollenius

0

입니다. 그것은 당신에게 좋은 기본 기능을 제공합니다.

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도 암호로 암호화 된 지퍼, ZIP64, 자동 압축 해제 파일, 유니 코드를 수행하는 무료 다운로드입니다 DotNetZip를 사용하도록 allws, 스팬 지퍼 :

는 VBScript로는 다음과 같습니다 , 그리고 다른 것들.

0

저는 개인적으로 D2009와 D2010을 완벽하게 지원하는 VCL Zip을 사용합니다. 이 게시물 당시에는 120 달러 였지만 매우 간단하고 유연하며 그 중에서도 가장 빠릅니다. 당신은 물론 설정 압축 수준, 디렉토리 구조의 수,

VCLZip1.ZipName := ‘myfiles.zip’; 
VCLZip1.FilesList.add(‘c:\mydirectory\*.*’); 
VCLZip1.Zip; 

당신이 기본적인 우편에 필요한 모든 것입니다 :

VCLZIP에서 살펴보고 현명한 당신의 관심

코드 경우 흔적을 다운로드 zip 스트림, 압축 해제 스트림 및 훨씬 더.

희망이 있습니다.

0

RE이 OpenSource SynZip unit를 살펴 보자. 압축 해제의 경우 Delphi에서 제공되는 기본 단위보다 훨씬 빠르며, 작은 exe (crc 테이블은 시작시 생성됩니다)를 생성합니다.

외부 dll은 필요하지 않습니다. Delphi 6에서 XE까지 작동합니다. 델파이의 유니 코드 버전에는 아무런 문제가 없습니다. 모두 하나의 단위로 구성됩니다.

방금 ​​Win-Ansi charset뿐 아니라 모든 Unicode 문자를 사용하여 Zip 내용 내에서 유니 코드 파일 이름을 처리하도록 일부 변경했습니다. 피드백을 환영합니다.

관련 문제