![]() |
Zip-Dateien beschädigt
Hallo, ich hätte da mal wieder ein Problem.
Also ich zippe und unzippe mit folgender zusammengebastelter Unit Dateien:
Delphi-Quellcode:
Jetzt habe ich aber das Problem, dass ich die damit erzeugten Zip-Dateien nicht mit dem in Windows XP implementierten Zipper öffnen kann, da kommt immer die hübsche Fehlermeldung, dass diese beschädigt seien...
unit compress;
interface uses ZLib, Windows, SysUtils, Variants, Classes, Graphics, Controls, Dialogs; procedure CompressFiles(Files : TStrings; const Filename : String); procedure DecompressFiles(const infile : TMemoryStream); implementation procedure CompressFiles(Files : TStrings; const Filename : String); var infile, outfile, tmpFile : TFileStream; compr : TCompressionStream; i,l : Integer; s : String; begin if Files.Count > 0 then begin outFile := TFileStream.Create(Filename,fmCreate); try { the number of files } l := Files.Count; outfile.Write(l,SizeOf(l)); for i := 0 to Files.Count-1 do begin infile := TFileStream.Create(Files[i],fmOpenRead); try { the original filename } s := ExtractFilename(Files[i]); l := Length(s); outfile.Write(l,SizeOf(l)); outfile.Write(s[1],l); { the original filesize } l := infile.Size; outfile.Write(l,SizeOf(l)); { compress and store the file temporary} tmpFile := TFileStream.Create('tmp',fmCreate); compr := TCompressionStream.Create(clMax,tmpfile); try compr.CopyFrom(infile,l); finally compr.Free; tmpFile.Free; end; { append the compressed file to the destination file } tmpFile := TFileStream.Create('tmp',fmOpenRead); try outfile.CopyFrom(tmpFile,0); finally tmpFile.Free; end; finally infile.Free; end; end; finally outfile.Free; end; DeleteFile('tmp'); end; end; procedure DecompressFiles(const infile : TMemoryStream); var dest,s : String; decompr : TDecompressionStream; outfile : TFilestream; i,l,c : Integer; begin // IncludeTrailingPathDelimiter (D6/D7 only) //dest := IncludeTrailingPathDelimiter(DestDirectory); infile.Position:=0; try { number of files } infile.Read(c,SizeOf(c)); for i := 1 to c do begin { read filename } infile.Read(l,SizeOf(l)); SetLength(s,l); infile.Read(s[1],l); { read filesize } infile.Read(l,SizeOf(l)); { decompress the files and store it } s := dest+s; //include the path outfile := TFileStream.Create(s,fmCreate); decompr := TDecompressionStream.Create(infile); try outfile.CopyFrom(decompr,l); finally outfile.Free; decompr.Free; end; end; finally end; end; end. Wie muss ich meine Prozeduren ändern, dass ich sie auch mit Windows öffnen kann? |
Re: Zip-Dateien beschädigt
Ich schätze mal, dass Windows diese Komprimierung nicht unterstützt. Kann ja mal ne *.mp3-Datei zu einer *.zip-Datei machen - Dann versucht Windows ebenfalls die Daten zu öffnen, aber es sollte die selbe Fehlermeldung kommen!
|
Re: Zip-Dateien beschädigt
Zitat:
Schau mal bei ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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 by Thomas Breitkreuz