![]() |
Re: ZLib
*ein lettes Mal pusht, danach gebe ich auf und baue das nicht ein* ;)
|
Re: ZLib
Also bei mir funktioniert es auch bei einem User ohne Adminrechten:
Delphi-Quellcode:
Die Fehlermeldung "Ungültige Stream Operation" kommt z.B. dann wenn du versuchst in den Decompressionstream zu schreiben. Also wenn du z.B. schreibst
procedure TForm1.Button1Click(Sender: TObject);
var SL: TStringList; begin SL := TStringList.Create; try SL.Add('xy.exe'); SL.Add('xy2.exe'); CompressFiles(SL, 'xy.zlib'); finally FreeAndNil(SL); end; end; procedure TForm1.Button2Click(Sender: TObject); begin DecompressFiles('xy.zlib', '.'); end;
Delphi-Quellcode:
statt
DecompressionStream.CopyFrom(InputStream, InputStream.Size);
Delphi-Quellcode:
outfile.CopyFrom(decompr,l);
|
Re: ZLib
Hallo, dankeschön, doch kann ich bei mir keinen Fehler entdecken.
Der Code ist lediglich dieser hier:
Delphi-Quellcode:
DokUndEinstDir ist der Pfad zu C:\Dokumente und Einstellungen\ ... \Anwendungsdaten\Programmname\. Versucht habe ich testweise auch, die Datei zuerst ins Userverzeichnis zu kopieren und dann zu entpacken, was jedoch auch dann nicht ging. Aber vielleicht liegt es wirklich nur am Code.
if OpenDialog2.Execute then
begin if Application.MessageBox('Do you want to overwrite the current settings of myAda?', 'Information', MB_YESNO) = mrYes then begin DecompressFiles(OpenDialog2.FileName, DokUndEinstDir); end; end; Frohe Weihnachten. |
Re: ZLib
Zitat:
|
Re: ZLib
Zitat:
Delphi-Quellcode:
DokUndEinstDir := IncludeTrailingPathDelimiter(GetSpecialFolder(Handle,
CSIDL_APPDATA)) + 'myAda\data\'; |
Re: ZLib
Für mich schaut es so aus, als ob er ein Problem beim Ermitteln der richtigen Datenlänge hat und dadurch versucht mehr zu lesen, als er dürfte. Aber für eine korrigierte Version fehlt mir die Zeit :-(
Aber wenn alle Dateien inklusive der Anwendung im selben Verzeichnis liegen, dann scheint es zu klappen... |
Re: ZLib
Zitat:
Zitat:
|
Re: ZLib
Hier mal der ganze Code von mir, vielleicht entdeckt ihr einen Fehler.
Code 1:1 vom SDC übernommen:
Delphi-Quellcode:
Mein Aufruf:
procedure DecompressFiles(const Filename, DestDirectory: string);
var dest,s : String; decompr : TDecompressionStream; infile, outfile : TFilestream; i,l,c : Integer; begin // IncludeTrailingPathDelimiter (D6/D7 only) dest := IncludeTrailingPathDelimiter(DestDirectory); infile := TFileStream.Create(Filename,fmOpenRead); 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 infile.Free; end; end;
Delphi-Quellcode:
Der Aufruf ist eigentlich trivial, darum kann dort der Fehler nicht liegen.
if OpenDialog2.Execute then
begin if Application.MessageBox('Do you want to overwrite the current settings?', 'Information', MB_YESNO) = mrYes then begin DecompressFiles(OpenDialog2.FileName, DokUndEinstDir); end; end; Und erstellt wurde die zu dekomprimierende Datei über den Code ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 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