![]() |
AW: Neue Zip-Archiv Komponente
In die Hilfe schauen?
![]()
Delphi-Quellcode:
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.
procedure Extract(const FileName: string; const Path: string = ''; CreateSubdirs: Boolean = True); overload;
procedure Extract(Index: Integer; const Path: string = ''; CreateSubdirs: Boolean = True); overload; Einfach mal mit
Delphi-Quellcode:
probieren?
PZip.Extract(SL[i], Pf, false);//<---
|
AW: Neue Zip-Archiv Komponente
Zitat:
Dann isses auch gleich im Programm. |
AW: Neue Zip-Archiv Komponente
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. |
AW: Neue Zip-Archiv Komponente
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. |
AW: Neue Zip-Archiv Komponente
Zitat:
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 ![]()
Delphi-Quellcode:
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;-) ![]()
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; |
AW: Neue Zip-Archiv Komponente
Ok, zu spät am Abend. Muss ich ausprobieren. Willie.
|
AW: Neue Zip-Archiv Komponente
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:
Die Bilder filterst du vor (wenn du zum Beispiel nur auf FileExtension prüfst) oder nach dem Extract raus.
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; 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. |
AW: Neue Zip-Archiv Komponente
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. |
AW: Neue Zip-Archiv Komponente
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz