Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Abbrevia + Folders (https://www.delphipraxis.net/53973-abbrevia-folders.html)

japetos 26. Sep 2005 17:38


Abbrevia + Folders
 
Wie bekomme ich es hin dass mir das Teil auch ganze Ordner zippt?

So sieht mein Code bisher aus:
Delphi-Quellcode:
         begin
          try
              AbZipper1.BaseDirectory := ExtractFilePath(FileName);
              AbZipper1.FileName := s;
              abZipper1.OpenArchive(s);
              AbZipper1.AddFiles(ExtractFileName(FileName), 0);
              AbZipper1.Save;
              AbZipper1.CloseArchive;
              ShowMessage(ExtractFileName(FileName) + ' zipped');
          except
          on E: Exception do
          ShowMessage('NO: ' + E.Message);
        end;
     end;

trifid 26. Sep 2005 17:42

Re: Abbrevia + Folders
 
Hallo japetos,

schau mal die Komponente hat
unter StoreOptions ein Element, diese auf soRecurse = True setzen oder
Delphi-Quellcode:
AbZipper1.StoreOptions := [soStripDrive,soRemoveDots,soRecurse]

japetos 26. Sep 2005 17:54

Re: Abbrevia + Folders
 
1. in den Optionen hab ich das schon gemacht.
2. wenn ich dann soRecurse := true setze wird zwar das zip-file erstellt, allerding ohne jeglichen Inhalt.

trifid 26. Sep 2005 19:15

Re: Abbrevia + Folders
 
Hallo japetos,
probiers mal damit

Delphi-Quellcode:
   
   try
      AbZipper1.BaseDirectory := 'C:\mypath\';
      AbZipper1.FileName := 'my.zip';
      AbZipper1.StoreOptions := [soStripDrive, soRemoveDots, soRecurse];
      AbZipper1.AddFiles('*.*', faReadOnly + faDirectory + faArchive + faAnyFile);
      AbZipper1.Save;
      AbZipper1.CloseArchive;

      ShowMessage('zipped');
   except
      on E: Exception do ShowMessage('NO: ' + E.Message);
   end;
geht natürlich auch mit
Delphi-Quellcode:
AbZipper1.AddFiles('*.*', 0);

japetos 26. Sep 2005 19:40

Re: Abbrevia + Folders
 
bei:
Delphi-Quellcode:
AbZipper1.StoreOptions := [soStripDrive, soRemoveDots, soRecurse];
kommt die Fehlermeldung: undeclared Identifier

bei:
Delphi-Quellcode:
AbZipper1.AddFiles('*.*', faReadOnly + faDirectory + faArchive + faAnyFile);
kommt die Fehlermeldung: Incompatible Types

und wenn ich
Delphi-Quellcode:
AbZipper1.AddFiles('*.*', 0);
eingebe, dann zippt er mir alles was auf dem Desktop ist :(

trifid 26. Sep 2005 20:05

Re: Abbrevia + Folders
 
Zitat:

kommt die Fehlermeldung: undeclared Identifier
verstehe ich nicht

Zitat:

kommt die Fehlermeldung: Incompatible Types
bei mir nicht reproduzierbar

Welche Version verwendest du ?
bist du mal mit dem Debugger durch, die sourcen sind ja mit dabei

Zitat:

AbZipper1.AddFiles('*.*', 0);
wenn der Desktop gezipt wird, dann simmt das BaseDirectory nicht

Ich bekomme bei diesem code keinen Fehler !
sonst hätte ich ihn ja nicht gepostet
Delphi-Quellcode:
   try
      AbZipper1.BaseDirectory := 'C:\mypath\';
      AbZipper1.FileName := 'my.zip';
      AbZipper1.StoreOptions := [soStripDrive, soRemoveDots, soRecurse];
      AbZipper1.AddFiles('*.*', 0);
      AbZipper1.Save;
      AbZipper1.CloseArchive;

      ShowMessage('zipped');
   except
      on E: Exception do ShowMessage('NO: ' + E.Message);
   end
und diese Variante geht auch
Delphi-Quellcode:
   try
      AbZipper1.BaseDirectory := 'C:\mypath\';
      AbZipper1.FileName := 'my.zip';
      AbZipper1.AddFiles('*.*', 0);
      AbZipper1.Save;
      AbZipper1.CloseArchive;

      ShowMessage('zipped');
   except
      on E: Exception do ShowMessage('NO: ' + E.Message);
   end
und die Komponente ist so im dfm-file beschrieben
Delphi-Quellcode:
  object AbZipper1: TAbZipper
    AutoSave = True
    DOSMode = False
    StoreOptions = [soStripDrive, soRemoveDots, soRecurse]
    Left = 120
    Top = 72
  end
versuche zuerst über einen statischen Pfad eine Lösung zu finden,
wenn es dann funktioniert kannst du immer noch ExtractFilePath(FileName) verwenden

japetos 26. Sep 2005 20:19

Re: Abbrevia + Folders
 
nope.

hab jetzt beides ausprobiert.
beim ersten erstellt er zwar das ZIP aber ohne Inhalt

und bei zweiten zippt es alles was sich auf dem Desktop befindet.
Total bescheuert.

:wall:

trifid 26. Sep 2005 20:37

Re: Abbrevia + Folders
 
Zitat:

hab jetzt beides ausprobiert.
wie hast du es ausprobiert mit C:\mypath ?
welche Version von Abbrevia verwendest du ?
aus welchen Pfad wird die Applikation gestartet - überprüfe das ?
Zitat:

beim ersten erstellt er zwar das ZIP aber ohne Inhalt
ich weiss nicht ob du die auch die Änderungen von der dfm vorgenommen hast

geh mal mit dem Debugger durch und schaue was er
bei AbZipper1.BaseDirectory zuordnet ?
später in AbZipper1.AddFiles('*.*', 0);
welchen Pfad verwendet er und warum diesen ?
Wie wird die FindFirst und FindNext in Abbrevia aufgerufen und abgearbeitet ?

manchmal stelle ich Fragen, damit diese auch beantwortet werden, falls es zu einer Rückantwort kommt

Christian Seehase 26. Sep 2005 20:38

Re: Abbrevia + Folders
 
Moin japetos,

dass hier:

Delphi-Quellcode:
faReadOnly + faDirectory + faArchive + faAnyFile
ist falsch.
Solche Flags solltest Du nur mit or verknüpfen.
Code:
faReadOnly =  1 => binär 00000001
faDirectory = 16 => binär 00010000
faArchive  = 32 => binär 00100000
faAnyFile  = 63 => binär 00111111
===================================
Summe      = 112 => binär 01110000
===================================
OR         = 63 => binär 00111111
===================================
Der Funktion wird als der Wert 112 übergeben, was aufgeschlüsselt nach Flagwerten
Delphi-Quellcode:
faDirectory or faArchive or faSymLink
bedeutet.
Mit OR verknüpft wäre es hingegen faAnyFile, was
Delphi-Quellcode:
faReadOnly or faHidden or faSysFile or faVolumeID or faDirectory or faArchive
entspricht.

trifid 26. Sep 2005 20:48

Re: Abbrevia + Folders
 
@Christian Seehase
du hast recht, aber dann ist auch die Hilfe falsch (s.a. Das Beispiel zur FindFirst (Funktion) )
Im code der FindFirst-Funktion sieht man die richtige Schreibweise
Delphi-Quellcode:
function FindFirst(const Path: string; Attr: Integer;
  var F: TSearchRec): Integer;
const
  faSpecial = faHidden or faSysFile or faVolumeID or faDirectory;
Sorry :oops:
Nur gut dass ich auch ein Beispiel ohne dieser Dateiattribute gemacht habe


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz