AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Neue Zip-Archiv Komponente

Ein Thema von Willie1 · begonnen am 28. Aug 2020 · letzter Beitrag vom 3. Sep 2020
Antwort Antwort
Seite 2 von 2     12   
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#11

AW: Neue Zip-Archiv Komponente

  Alt 31. Aug 2020, 17:40
In die Hilfe schauen? http://docwiki.embarcadero.com/Libra...ipFile.Extract
Delphi-Quellcode:
procedure Extract(const FileName: string; const Path: string = ''; CreateSubdirs: Boolean = True); overload;
procedure Extract(Index: Integer; const Path: string = ''; CreateSubdirs: Boolean = True); overload;
Der letzte Parameter, den Du auf True gesetzt hast, steuert die Erzeugung der Ordnerstruktur. Ist er True, dann wird die Ordnerstruktur erzeugt, ist er false, dann nicht.

Einfach mal mit PZip.Extract(SL[i], Pf, false);//<--- probieren?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: Neue Zip-Archiv Komponente

  Alt 31. Aug 2020, 18:02
und in einem Ordner ablegen. Dann liest mein Programm diese Bilder ein.
Warum nicht direkt in einen TMemoryStream auslesen?
Dann isses auch gleich im Programm.
$2B or not $2B
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#13

AW: Neue Zip-Archiv Komponente

  Alt 31. Aug 2020, 18:50
Hallo Delph-Narium,
ich habe in die Hilfe gesehen! Nur wenn der Parameter auf false steht, muss ich vorher den Ordner selbst anlegen, sonst gibt es einen Fehler "Ordner nicht gefunden". Das hatte ich nicht bedacht. Himitsu, muss ich drüber nachdenken.
Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#14

AW: Neue Zip-Archiv Komponente

  Alt 1. Sep 2020, 18:21
Hallo Himitsu, wie meinst du das mit TMemoryStream?
Ich habe bisher alle Bilder aus einem Archiv in einen temporären Ordner ausgepackt und dann durch mein Programm ausgelesen. Nach Schließen des Archivs habe ich den Ordner gelöscht.
Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#15

AW: Neue Zip-Archiv Komponente

  Alt 1. Sep 2020, 18:54
Hallo Himitsu, wie meinst du das mit TMemoryStream?

Du musst nicht den Umweg über eine Datei auf der Festplatte gehen. Du kannst die Bilder direkt aus dem ZipFile in ein Bitmap o.ä. laden.

Verwende System.Zip.TZipFile.Read

procedure Read(const FileName: string; out Stream: TStream; out LocalHeader: TZipHeader); overload;

Also ungefähr so (Nicht getestet, sondern nur hingetippt. Habe diese ZIP-Komponente noch nicht verwendet). Den Rest macht Google Bei Google suchendelphi tzipfile read TMemoryStream example

Delphi-Quellcode:
var
  myMemoryStream:TMemoryStream;
  hdr:TZipHeader;
begin
  myMemoryStream:=TMemoryStream.Create;
    try
      zipfile.Read('myPicutre.bmp',myMemoryStream,hdr);
      myBitmap.LoadFromStream(myMemoryStream);
    finally
      myMemoryStream.Free;
    end;
end;
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de

Geändert von bernau ( 1. Sep 2020 um 18:58 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#16

AW: Neue Zip-Archiv Komponente

  Alt 1. Sep 2020, 23:26
Ok, zu spät am Abend. Muss ich ausprobieren. Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
763 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Neue Zip-Archiv Komponente

  Alt 2. Sep 2020, 11:26
Hallo Willie

du schreibst in #10, dass du die Files aus der ZIP Datei zuerst auf Platte in einen Ordner abspeichern willst. Dabei willst du die in der ZIP vorhandene Unterordnerstruktur nicht übernehmen. Wenn du das so tust, dann sind wahrscheinlich Kollisionen punkto Filenamen nicht vermeidbar(?). Vielleicht hast du aber auch eindeutige Namen für deine Bilder gewählt - dann wäre ja alles gut.

ZIP Datei auspacken in einen Ordner ohne dabei die Unterordnerstruktur zu übernehmen:

Delphi-Quellcode:
procedure auspacken( zipfilename : string; ausgabeordner : string );
var
    zip : TZipfile;
    filename : string;

begin
  if forcedirectories(ausgabeordner) then
  if TZipFile.IsValid( zipfilename ) then
  begin
    zip := TZipFile.Create;
   try
    zip.Open( zipfilename,zmRead );
    for filename in zip.FileNames do
        zip.Extract( filename, ausgabeordner, false);
   finally
    zip.Free;
   end;
  end;
end;
Die Bilder filterst du vor (wenn du zum Beispiel nur auf FileExtension prüfst) oder nach dem Extract raus.

Wie oben mehrfach erwähnt wird: Wenn du Bild nach Bild in deinem Programm anzeigen (und nie als Datei auf Platte) willst, dann ist der Weg über Streams praktischer.
Michael Gasser

Geändert von Michael II ( 2. Sep 2020 um 11:37 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#18

AW: Neue Zip-Archiv Komponente

  Alt 3. Sep 2020, 11:59
Hallo Michael,
ich habe daran gedacht, wenn ich alle Bilder in einem Ordner auspacke, es zu Namenskonflikten kommen kann. Was passiert denn dann, gibt es Fehlermeldung oder Frage vor Überschreiben? Ich nenne mit meinem Programm, an dem ich gerade arbeite, alle Bilder nach dem Aufnahmedatum um : JJJJ.MM.TT=SS.mm.ss. Das geht natürlich nur mit Bildern, die das Aufnahmedatum speichern. An doppelte Bilder hänge ich _nnn (nat. Zahl) an. Das klappt seit Jahren gut.

Damals gab es TZipFile noch nicht, TMemoryStream werde ich auf die Todo-Liste setzen.

Ich filtere die Bilder tatsächlich mit der Dateiendung: if Pos(UpperCase(ExtractFileExt(Name)), PICTYPES) > 0 then ..
Die Funktion ..IsValid() bringt mich auf eine Idee. Gibt es die Möglichkeit ein JPG-Bild eindeutig zu erkennen, da es mehrere Ext für JPG-Bilder gibt. so eine Funktion, wie etwa IsJpeg() then ..
Willie.

Ich brauche länger zum Schreiben, dann wirft mich Delphi-Forum raus und ich muss mich neu anmelden, das ist blöd.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#19

AW: Neue Zip-Archiv Komponente

  Alt 3. Sep 2020, 14:11
SaveToFile fragt niemals.
Entweder es erstellt die Datei, oder überschreibt sie.

Du kannst vorher mit FileExists prüfen, oder du speicherst über SaveToStream mit einem TFileStream oder THandleStream+CreateFile,
da hast du dann die Wahl, ob immer ersellt/überschrieben werden soll, oder nur NeuErstellt, bzw. nur überschrieben.
Bei fehlenden Berechtigungen kommt es natürlich zu einer Exception.




Intern mit SaveToStream kann es niemals zu einem Konflikt kommen, da dort der Dateiname/Pfad egal ist.

PS: Mann kann in einer ZIP auch CaseSensitive speichern.
BILD.jpg
BILD.JPG
BILD.jpG
bild.jpg
...
das sind dann alles unterschiedliche Dateien.
Es lassen sich auch darin Dateien mit dem Namen "COM1" und Dergleichen speichern, aber sowas lässt sich im Windows nicht auf der Festplatte speichern.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.
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