문제

나는 델파이로 압축하고 압축하는 간단한 방법을 찾고 있습니다. 나는 이미 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 내에서 유니 코드 파일 이름을 처리하기 위해 몇 가지 변경을했습니다. 피드백을 환영합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top