CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [Szukam] Komponent do wypakowywania ZIP z pamięci

[Szukam] Komponent do wypakowywania ZIP z pamięci

problemy z funkcjonowaniem bibliotek, komponentów itp.

[Szukam] Komponent do wypakowywania ZIP z pamięci

Nowy postprzez janek2012 » poniedziałek, 5 września 2011, 21:33

Witam, chciałbym w łatwy sposób dodać spakowany plik do zasobów programu - najlepiej za pomocą komponentu, bo niewykluczone że wraz z rozwojem programu trzeba będzie często ten plik zmieniać.
Wiem, że mogę sobie ręcznie kompilować zasoby (tak jak jest to opisane w poradniku C++), ale wtedy musiałbym spakować do ZIP/SFX, skompilować zasób, wrzucić do projektu, potem kazać mu się wyeksportować do pliku a potem jeszcze wypakować - ZA DŁUGO!

Orientuje się ktoś może, czy istnieje taki komponent, który spakuje pliki do zip/rar/tar, właduje do programu i jeszcze ładnie wypakuje z zasobów?
Myślałem, że Abbrevia da sobie z tym radę, ale chyba jednak nie, albo czegoś nie umiem :(

Jeżeli ktoś zna taki komponent, bardzo byłbym wdzięczny za pomoc.

PS. Pozdrawiam Cyfrowego Barona :)
Avatar użytkownika
janek2012
Bladawiec
Bladawiec
 
Posty: 30
Dołączył(a): poniedziałek, 12 lipca 2010, 22:56
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows 8 x64
Kompilator: C++ Builder XEe
SKYPE: janek2012
Gadu Gadu: 1489603
    Windows 7Opera

Re: [Szukam] Komponent do wypakowywania ZIP z pamięci

Nowy postprzez Cyfrowy Baron » wtorek, 6 września 2011, 10:16

Komponent którego potrzebujesz to ZIPForge dostępny tutaj http://www.componentace.com/download/download.php?editionid=12 dla twojej wersji środowiska. To niestety komponent komercyjny.
O darmowych nie słyszałem.

janek2012 napisał(a):Orientuje się ktoś może, czy istnieje taki komponent, który spakuje pliki do zip/rar/tar


ZIPForge obsługuje tylko ZIP, o komponentach do obsługi RAR i TAR nie słyszałem.

janek2012 napisał(a):właduje do programu i jeszcze ładnie wypakuje z zasobów?


Nie bardzo rozumiem o co chodzi z tym władowywaniem do programu. Jeżeli chodzi Tobie o to, żeby program sam coś wprowadził do własnego pliku EXE jako zasób, czy nawet cokolwiek, to nie jest to wogóle możliwe, gdyż nie można edytować plików aktywnych procesów, a każdy uruchomiony plik programu jest procesem aktywnym.

Jeżeli jednak chodzi Tobie o to, że umieszczasz archiwum w zasobach programu jako zasób jeszcze na etapie programowania to jest to oczywiście możliwe, ale z takiego archiwum niczego nie da się wypakować, gdyż w zasobach programu to jest ono zasobem a nie archiwum, więc najpierw musisz to archiwum wypakować gdzieś na dysk, a potem to już możesz wczytywać zawartość tego archiwum bezpośrednio do pamięci, bez wypakowywanie jego zawartości na dysk.

janek2012 napisał(a):Myślałem, że Abbrevia da sobie z tym radę, ale chyba jednak nie,


A z czym konkretnie Abbrevia nie daje sobie rady?



Różnica między Abbrevia i ZIPForge polega na wygodzie użycia. ZIPForge to jeden komponent, który obsługuje wszystkie aspekty archiwów ZIP za pomocą kilku naprawdę prostych funkcji, ale tylko archiwa ZIP. ZIPForge jest komponentem komercyjnym i po zainstalowaniu wersji TRAIL w gotowym programie chwili jego uruchomienia wyświetla się komunikat o tym, że jest to właśnie wersja próbna poza tym działa. Jeżeli jednak najpierw zainstalujesz komponent, potem skopiujesz sobie gdzieś katalog z zainstalowanymi plikami, a potem odinstalujesz komponent, to będziesz miał biblioteki do obsługi archiwum ZIP. Używając tylko bibliotek zamiast komponentu, czyli włączasz do projektu bibliotekę:

KOD cpp:     UKRYJ  
#include "ZipForge.hpp"


Środowisko musi znać lokalizację tej biblioteki, więc dodajesz ścieżkę dostępu do tej biblioteki, a wygląda to mnie więcej tak w środowisku C++Builder 2010:

  • W menu Tools wybierz Options.
  • Następnie szukaj zakładki Environment Options.
  • Szukaj sekcji C++ Options bloku Path and Directories.
  • Przy polu (typu Edit) o nazwie Search path kliknij na przycisku ...
  • Powinno wyskoczyć okno Directories w którym dodaj ścieżkę dostępu do katalogu z komponentem. Dla ZIPForge jest to np. c:\Program Files\Embarcadero\ComponentAce\ZipForge\Lib\Delphi 2010 and C++ Builder 2010\

tools-options.png


Bibliotekę ZipForge.hpp włączasz np. w pliku nagłówkowym, ale w pliku źródłowym musisz jeszcze dodać: #pragma link "ZipForge", mniej więcej w tym miejscu:

KOD cpp:     UKRYJ  
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ZipForge"
Teraz wystarczy tworzyć komponent dynamicznie, czyli, np tak:

Plik nagłówkowy np. Unit1.h
KOD cpp:     UKRYJ  
private:
         TZipForge *Archiver;


Plik źródłowy np. Unit1.cpp
KOD cpp:     UKRYJ  
Archiver = new TZipForge(NULL);


Przy stosowaniu bibliotek zamiast komponentu nie wyskakuje żaden komunikat i nie ma żadnych ograniczeń.
Przykład użycia ZIPForge w tych postach: http://programowanie.cal.pl/forum/viewtopic.php?f=5&t=1050&p=6956&hilit#p6945 oraz http://programowanie.cal.pl/forum/viewtopic.php?f=2&t=617&p=3637#p3637
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
janek2012
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [Szukam] Komponent do wypakowywania ZIP z pamięci

Nowy postprzez janek2012 » wtorek, 6 września 2011, 14:05

Dziękuję za wyczerpującą odpowiedź :)
Jeżeli jednak chodzi Tobie o to, że umieszczasz archiwum w zasobach programu jako zasób jeszcze na etapie programowania to jest to oczywiście możliwe, ale z takiego archiwum niczego nie da się wypakować, gdyż w zasobach programu to jest ono zasobem a nie archiwum, więc najpierw musisz to archiwum wypakować gdzieś na dysk, a potem to już możesz wczytywać zawartość tego archiwum bezpośrednio do pamięci, bez wypakowywanie jego zawartości na dysk.


O to właśnie mi chodziło, ale skoro jest to niemożliwe, to zrobię to pakując pliki WinRAR'em do SFX i umieszczę go jako zasób - następnie wypakuję zasób i uruchomię gotowy SFX.

Myślałem, że da się wypakowywać wprost z zasobu, ale skoro nie, pozostaje "ręczny" sposób :)

Jeśli chodzi o instalację komponentów, to mniej więcej wiem jak to zrobić, bo już kilka pakietów zainstalowałem.

Temat można w takim razie zamknąć, chyba że ktoś będzie miał jeszcze coś do powiedzenia później.
Avatar użytkownika
janek2012
Bladawiec
Bladawiec
 
Posty: 30
Dołączył(a): poniedziałek, 12 lipca 2010, 22:56
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows 8 x64
Kompilator: C++ Builder XEe
SKYPE: janek2012
Gadu Gadu: 1489603
    Windows 7Opera

Re: [Szukam] Komponent do wypakowywania ZIP z pamięci

Nowy postprzez Cyfrowy Baron » środa, 7 września 2011, 09:01

janek2012 napisał(a):O to właśnie mi chodziło, ale skoro jest to niemożliwe, to zrobię to pakując pliki WinRAR'em do SFX i umieszczę go jako zasób - następnie wypakuję zasób i uruchomię gotowy SFX.

Myślałem, że da się wypakowywać wprost z zasobu, ale skoro nie, pozostaje "ręczny" sposób :)


Po co kombinować z archiwum, możesz przecież umieścić pliki w zasobach programu jako zasób i wypakowywać bezpośrednio z zasobów.
Jakiego rodzaju pliki będziesz wypakowywał? Może lepiej jest użyć archiwum ZIP zamiast RAR. Do plików graficznych np. lepiej jest używać ZIP gdyż daje lepszą kompresję, przy czym w przypadku plików graficznych archiwa mają sens tylko przy formatach nieskompresowanych, czyli korzystnie jest dla formatu BMP, ale niekorzystnie (niezależnie od archiwum) dla formatu JPEG. Używając archiwum ZIP możesz wypakowywać jego zawartość bezpośrednio do pamięci, bez wypakowywania plików na dysk.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [Szukam] Komponent do wypakowywania ZIP z pamięci

Nowy postprzez janek2012 » niedziela, 11 września 2011, 11:46

Przepraszam, że dopiero teraz piszę, ale pakuję pliki XML i DLL, które pięknie pakują się WinRARem z wymuszoną kompresją tekstu - po usunieciu niepotrzebnych zasobów SFX archiwum jest bardzo malutkie i świetnie pasuje do moich potrzeb.
Można chyba zamknąć temat.
Avatar użytkownika
janek2012
Bladawiec
Bladawiec
 
Posty: 30
Dołączył(a): poniedziałek, 12 lipca 2010, 22:56
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows 8 x64
Kompilator: C++ Builder XEe
SKYPE: janek2012
Gadu Gadu: 1489603
    Windows 7Opera


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Biblioteki i komponenty

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości

cron