Delphi XE2 TZipFile a TOSVersion

vložil Radek Červinka 7. září 2011 22:19

Jelikož je XE2 multiplatformní je vhodné mít nástroj na kontrolu platforem, potažmo verze.

Jednotka System.SysUtils byla rozšířena o záznam TOSVersion.

type
  TOSVersion = record
  public type
    TArchitecture = (arIntelX86, arIntelX64);
    TPlatform = (pfWindows, pfMacOS);
  private
    class var FArchitecture: TArchitecture;
    class var FBuild: Integer;
    class var FMajor: Integer;
    class var FMinor: Integer;
    class var FName: string;
    class var FPlatform: TPlatform;
    class var FServicePackMajor: Integer;
    class var FServicePackMinor: Integer;
    class constructor Create;
  public
    class function Check(AMajor: Integer): Boolean; overload; static; inline;
    class function Check(AMajor, AMinor: Integer): Boolean; overload; static; inline;
    class function Check(AMajor, AMinor, AServicePackMajor: Integer): Boolean; overload; static; inline;
    class function ToString: string; static;
    class property Architecture: TArchitecture read FArchitecture;
    class property Build: Integer read FBuild;
    class property Major: Integer read FMajor;
    class property Minor: Integer read FMinor;
    class property Name: string read FName;
    class property Platform: TPlatform read FPlatform;
    class property ServicePackMajor: Integer read FServicePackMajor;
    class property ServicePackMinor: Integer read FServicePackMinor;
  end;

Použití je jednoduché:

    1program Project4;
    2{$APPTYPE CONSOLE}
    3uses
    4  System.SysUtils;
    5begin
    6  writeln(TOSVersion.ToString);
    7  case TOSVersion.Architecture of
    8  arIntelX64:
    9    writeln('X64');
   10  arIntelX86:
   11    writeln('X86');
   12  else
   13    writeln('???');
   14  end;
   15  if TOSVersion.Check(6,1) then
   16    writeln('Windows 7');
   17end.

výsledek je pak

Windows 7 Service Pack 1 (Version 6.1, Build 7601, 64-bit Edition)
X64
Windows 7

Mnohem zajímavější je začlenění podpory pro Zip přímo do RTL. Jedná se o čistou Object Pascal implementaci, ale bez podpory hesla. I tak je to velmi šikovné.

Komprese:

    1uses
    2  System.Zip;
    3
    4var
    5  z: TZipFile;
    6begin
    7  z := TZipFile.Create;
    8  z.Open('test.zip', zmWrite);
    9  z.Add('prvnisoubor.txt');
   10  z.Add('druhy.dat');
   11  z.Add('čeština.txt');
   12  z.Close;
   13end.

Rozbalení:

    1program Project4;
    2uses
    3  System.Zip;
    4var
    5  z: TZipFile;
    6begin
    7  z := TZipFile.Create;
    8  z.Open('test.zip', zmRead);
    9  z.ExtractAll;
   10//nebo
   11  z.Extract('druhy.dat');
   12//nebo
   13  z.Extract(1); // druhý soubor v archívu
   14  z.Close;
   15end.

Je implementována podpora pro "Store" a "Deflate", ale rozhraní je připraveno pro další metody komprese (via RegisterCompressionHandler).

Nezapomeňte, že příští týden je v Praze a Bratislavě představení Rad Studio XE2. Pawel Glowacki půjde určitě do větší hloubky než já (aspoň v některých tématech).

Mimochodem: s velkou pravděpodobností účastníci mohou získat slevu na zakoupení Delphi XE2 (resp. pravděpodobně i na další produkty) a v tombole bude možnost vyhrát Delphi XE2 (a nebude to Starter).


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

Tagy: ,

Novinky v Delphi

Komentáře

20.10.2011 10:12:17 #

RadstaR

Asi budu mit blbej dotaz, ale jde nejak pomoci tohodle System.Zip zobrazit prubeh baleni/rozbalovani souboru ? Uz me nebavi resit tyhle veci pomoci JCL, ktery mi do EXE pridava zbytecne moc balastu :)

RadstaR

20.10.2011 21:46:46 #

Radekc

Ne, ale nic ti nebrání jednoduše si to upravit do nového souboru. Ten unit je celkem čitelný.

Radekc

3.3.2012 12:47:01 #

Jan

Hi,

I found your website, because I am looking for compression Types in Delphi XE2. I have read your remark about using "RegisterCompressionHandler". I am trying to use that function, but I don't know how to use it. I am getting error messages all the time. Can you please help me?
I'd be very grateful! Thanks in advance.
Jan (Netherlands)

Jan

3.3.2012 21:31:42 #

Radekc

RegisterCompressionHandler is prepared for other implementation (own) - in basic only store or deflate from ZIP is supported.

Radekc

3.3.2012 22:11:58 #

Jan

Yes, that is what I understand from it. I want to compress *.tar and *.gz, but I don't know how to do that with Delphi. I am getting error messages all the time, whatever I do...
Do you know how to do that?

Jan

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS