TZipper

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Joker
Beiträge: 4
Registriert: Mi 3. Okt 2012, 11:20

TZipper

Beitrag von Joker »

Hallo,

ich möchte Daten packen und entpacken und habe hier im Forum zwar ein paar Themen gefunden, aber die helfen nicht wirklich.
So weit ich das verstanden habe benötigt man den TZipper hierzu, wo jedoch bekomme ich diesen und wie binde ich es in Lazarus ein?
Oder gibt es eine andereMöglichkeit Daten mit Lazarus (free) zu packen- und entpackken. Würde mich freuen wenn mir jemand eine,
auch für nicht Profis verständliche Hilfe hierzu bieten könnte.

Freundliche Grüße
Joker

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: TZipper

Beitrag von theo »


grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: TZipper

Beitrag von grl »

Oder vielleicht auch:

http://www.theo.ch/lazarus/uDataPacker.pas

Kommt immer drauf an, was du wie und wohin packen/entpacken willst....

Luggi

Joker
Beiträge: 4
Registriert: Mi 3. Okt 2012, 11:20

Re: TZipper

Beitrag von Joker »

Hallo Theo,

vorab danke für die schnelle Antwort bzw. Link. Wie bereits geschrieben kenne ich diesen Beitrag bereits (beim googeln kommt auch nur das), aber leider hilft mir der Beitrag/Code dort nicht weiter.
Vielmeher verstehe ich nicht was ParamStr(1); sein soll, ist das der Name den die Zip-Datei bekommen soll?

Code: Alles auswählen

var
  Zipper: TZipper;
  i : integer;  // FRAGE 1:  müsste hier nicht die Variable i deklariert werden
  begin
    try
      Zipper := TZipper.Create//FRAGE 2: TZipper ist das ein Bedienelement von Lazarus, wo finde ich diesen
      Zipper.FileName := ParamStr(1); //FRAGE 3: muss anstelle von ParmStr(1) der Zip-Datei ein Name vergeben werden,
      for I := 2 to ParamCount do //FRAGE
        Zipper.Entries.AddFileEntry(ParamStr(I), ParamStr(I)); //FRAGE ?
      Zipper.ZipAllFiles;
    finally
      Zipper.Free;
    end;
    end;
  end


könntes Du mir die rot gekennzichneten Stellen erklären vor allem will ich nicht alles zippen/packen sondern beispielsweise nur Bild.bmp und ich möchtes es auch mit einem Passwort schützen.
Oder besser könntest du den Code so ergänzen, das ich damit die Bild.bmp (von obigen Beispiel) gezippt und mit einem passwort verschlüssel bekomme, wäre Dir sehr dankbar dafür.

Freundliche Grüße
Joker
Zuletzt geändert von Lori am Fr 12. Apr 2013, 17:59, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter nutzen

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TZipper

Beitrag von Socke »

Hallo,
ich melde mich mal an theos Stelle mit ein paar Antworten.
Joker hat geschrieben:// FRAGE 1: müsste hier nicht die Variable i deklariert werden

Ja, das war ein Fehler im Wiki.
Joker hat geschrieben:FRAGE 2: TZipper ist das ein Bedienelement von Lazarus, wo finde ich diesen

TZipper ist eine normale Klasse und kein Bedienelement. Daher findest du sie auch nicht in Lazarus. Die Klasse ist in der Unit Zipper (vgl. den Wiki-Artikel) implementiert. Diese wird mit dem Free Pascal Compiler ausgeliefert -- du hast sie also schon.

Joker hat geschrieben://FRAGE 3: muss anstelle von ParmStr(1) der Zip-Datei ein Name vergeben werden,

Wenn die Zip-Datei einen bestimmten Dateinamen haben soll, musst du diesen hier natürlich selbst vorgeben.

Joker hat geschrieben: for I := 2 to ParamCount do //FRAGE ?
Zipper.Entries.AddFileEntry(ParamStr(I), ParamStr(I)); //FRAGE ?

Das Beispiel-Programm erstellt eine Zip-Datei, in der alle Dateien gespeichert werden, die per Komandozeile übergeben wurden. Das macht man zum Beispiel über ein Dos-Fenster ("testprojekt" ist ein beispielhafter Programmname):

Code: Alles auswählen

C:\User\myname\>testprojekt datei1.txt datei2.txt
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Joker
Beiträge: 4
Registriert: Mi 3. Okt 2012, 11:20

Re: TZipper

Beitrag von Joker »

So komm ich nicht weiter, daher bitte nur ganze Beiträge posten oder gar nicht

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Zipper;
 
type
  TForm1 = class(TForm)
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  Zipper: TZipper;
  i : integer;
implementation
 
{$R *.lfm}
 
begin
  OurZipper := TZipper.Create;
  try
    OurZipper.FileName := ParamStr(1);
    for I := 2 to ParamCount do
      //OurZipper.Entries.AddFileEntry(ParamStr(I), ParamStr(I));
      OurZipper.Entries.AddFileEntry D:\Test\>testprojekt datei1.txt datei2.txt
    OurZipper.ZipAllFiles;
  finally
    OurZipper.Free;
  end;
end.


Was ist hier falsch?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: TZipper

Beitrag von theo »

Hmm, mir scheint dein Problem ist nicht direkt beim Zipper, sondern vielmehr beim Pascal /Lazarus / Delphi programmieren allgemein.

Mach doch erst mal ein paar Tutorials durch. z.B. hier
http://www.delphi-treff.de/tutorials/grundlagen/
Die sind zwar für Delphi, aber das ist auf diesem Niveau bei Lazarus ziemlich gleich.

grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: TZipper

Beitrag von grl »

Joker hat geschrieben:So komm ich nicht weiter, daher bitte nur ganze Beiträge posten oder gar nichthttp://www.lazarusforum.de/posting ... 957a77358#


Für mich klingt das sehr nach "gar nicht". Oder sollen wir hier wiedermal jemandem seine Hausaufgaben machen?

Luggi

Joker
Beiträge: 4
Registriert: Mi 3. Okt 2012, 11:20

Re: TZipper

Beitrag von Joker »

Das war jetzt meine erste Frage in diesem Forum und schon werde ich als unqulifiziert verwiesen, schade, traurig.
Ich kenne auch die Delphi-Seite und leugne auch nicht das ich Lazarus-Anfänger bin, aber wollte jetzt einfach mal nach "Hello World" etwas programmieren, das mich aktuell interessiert. Und da der Quelltext für diese Zip-Geschichte nur wenige Zeilen enthält, dachte ich mir, dass ich mit meiner ursprünglich gestellten Frage, niemanden überfordern würde. Aber ich hatte schon mit so einer oder ähnlicher Antwort gerechnet, da es in den meisten Foren immer einpaar User gibt, denen es nicht darum geht etwas für die Gemeinde beizutragen (das ist Sinn und Zweck eines Forums denke ich), sondern BeitragsPunkte zu sammeln.
Nur schade der nächste Interessen der nach diesem Thema sucht, wird lediglich auch nur auf diesen Beitrag stoßen.

Ich schließe hiermit diesen Beitrag
Freundliche Grüße
Joker

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TZipper

Beitrag von Socke »

Joker hat geschrieben:Das war jetzt meine erste Frage in diesem Forum und schon werde ich als unqulifiziert verwiesen, schade, traurig.

Deine Beispiele zeigen, dass dir grundlegendes Wissen fehlt. Einige Beispiele sind: Wie ruft man eine Funktion auf, wie übergebe ich eine Zeichenkette (Dateiname etc.) an eine Funktion, was ist eine Variable usw. Da genau solche Dinge in einem Tutorial behandelt werden, solltest du dir dazu zumindest einmal durchlesen.

Viele Leute -- so wie du -- möchten eine Sprache lernen. Daher tauchen Fragen nach den Grundlagen immer wieder (und das häufig) auf. Damit man nicht jedem die Grundlagen von neuem erklären muss, wurden Tutorials geschrieben, die sich die Lernenden durchlesen und durcharbeiten können. Von dieser Seite möchte ich dich um ein wenig Verständnis bitten, wenn man dich hier auf entsprechende Hilfestellungen hinweist.

Joker hat geschrieben:So komm ich nicht weiter, daher bitte nur ganze Beiträge posten oder gar nicht [...] Was ist hier falsch?

Ich vermute mal, dass sich das direkt auf mein Posting bezieht. Nun ja, das ist mein Stil. Ich möchte dich zum Nachfragen anregen. Wenn du die Frage richtig stellst, werden viele bereit sein dir zu helfen. Vielleicht wäre ein solche Frage: Wie übergebe ich einen Dateinamen an eine Funktion? Manchmal sehen Fragen ziemlich banal aus. Aber dadurch, dass sie so einfach sind, können sie auch schnell beantwortet werden und du bist deiner Lösung ein Stück weiter. Fertige Lösungen wollen viele nicht anbieten (auch wenn sie es könnten), denn dann wäre der Lerneffekt weg.

Joker hat geschrieben:OurZipper.Entries.AddFileEntry D:\Test\>testprojekt datei1.txt datei2.txt

Zur Erklärung dieser Funktion:
  • OurZipper ist ein Objekt von der Klasse TZipper und stellt damit alles bereit, was man zum Bearbeiten von Zip-Dateien braucht (Verschlüsselung ist nicht möglich!). Dieses hat eine Eigenschaft (engl. property) Entries. Darin sind alle Dateieinträge gespeichert. Die Eigenschaft Entries bietet die Funktion AddFileEntry() um Einträge hinzuzufügen. Die Funktion AddFileEntry() erwartet 2 Parameter: einen Dateinamen auf der Festplatte (die Datei kommt in das Archiv) und einen Namen, unter dem die Datei im Archiv abgespeichert werden.
  • Ein Dateiname ist nichts anderes als eine Folge von Zeichen (mehrere Zeichen nacheinander; Zeichen sind zum Beispiel: Abcdefäü+#ß9). Eine Folge von Zeichen wird auch Zeichenkette genannt. Im Englischen heißen diese String. In Pascal setzt man eine Zeichenkette in einfache Anführungszeichen. Ein Beispiel: 'Eine Zeichenkette', oder auch: 'C:\Windows\calc.exe'
  • Will man eine Funktion aufrufen, schreibt man: <Funktionsname>(Parameter1, Parameter2, ..., ParameterN); Dabei muss man <Funtionsname> durch den Namen der Funktion ersetzen (ggf. wie oben Beschrieben den Variablennamen des Objektes davor schreiben); Natürlich muss Parameter1, Parameter2 usw. durch Variablen oder direkt durch einen festen Wert ausgetauscht werden.
  • Unter der Annahme, dass in der Variablen OurZipper (jetzt kommen deine Fragen: Was ist eine Variable?) ein Objekt der Klasse TZipper (deine Fragen: Was ist eine Klasse? Was ist ein Objekt?), wäre der Funktionsaufruf:

    Code: Alles auswählen

    OurZipper.Entries.AddFileEntry('datei1.txt', 'datei2.txt');

    Damit würde die Datei datei1.txt in das Archiv übernommen und dort unter dem Namen datei2.txt abgelegt.

Vermutlich hast du jetzt noch einige Fragen. Die kannst du hier natürlich stellen. Einige werden auch schon durch vorhandene Tutorials beantwortet.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: TZipper

Beitrag von Christian »

Leider verstehen viele Einsteiger den Unterschied zwischen einem Forum wo man sich aus freundlichkeit hilft und einem Kostenpflichtigen Kurs für 600 Eur / Tag nicht so ganz.
Du kannst doch nicht ernsthaft erwarten das die Leute dir vorkaun wozu du zu faul bist einfach mal kurz google zu bemühen. Hättest du einfach mal ParamStr(1) bei google eingegeben wärst du mit dem ersten Ergebnis hier gelandet: http://www.delphibasics.co.uk/RTL.asp?Name=ParamStr
Du erwartest das sich jemand hinsetzt und dir ParamStr(1) mit mehreren Sätzen erklärt. Eventl formuliert er die Erklärung dann nicht perfekt und braucht noch weitere 2 Anläufe und in summe 30 min seiner Zeit um dir das beizubringen. Anstatt das einfach mal zu suchen und eine Seite zu finden wos perfekt erklärt ist, die mit bedacht geschrieben ist.

Edit: Oh Sry seh gerad du warst das gar ned mit ParamStr(1)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten