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é:

program Project4;
{$APPTYPE CONSOLE}
uses
  System.SysUtils;
begin
  writeln(TOSVersion.ToString);
  case TOSVersion.Architecture of
  arIntelX64:
    writeln('X64');
  arIntelX86:
    writeln('X86');
  else
    writeln('???');
  end;
  if TOSVersion.Check(6,1) then
    writeln('Windows 7');
end.

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:

uses
  System.Zip;

var
  z: TZipFile;
begin
  z := TZipFile.Create;
  z.Open('test.zip', zmWrite);
  z.Add('prvnisoubor.txt');
  z.Add('druhy.dat');
  z.Add('čeština.txt');
  z.Close;
end.

Rozbalení:

program Project4;
uses
  System.Zip;
var
  z: TZipFile;
begin
  z := TZipFile.Create;
  z.Open('test.zip', zmRead);
  z.ExtractAll;
//nebo
  z.Extract('druhy.dat');
//nebo
  z.Extract(1); // druhý soubor v archívu
  z.Close;
end.

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).

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

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).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

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.

Poslední komentáře

Comment RSS

Dle měsíců