![]() |
Problem mit BlockRead, BlockWrite
Folgende Situation:
Eine Exe-Datei mit einer zusätzlich angehängten Datei (copy /b foo.exe + test.mp3 bar.exe). Die reesultierende Exe ist noch lauffähig. Zweites Programm beinhaltet eine Funktion, die die angehängte Datei extrahieren soll. Soll mal ein SFX Archiver werden, also in ansätzen. damit ich nicht jedes mal die Dateigröße anpassen muss, arbeite ich mit zwei Anwendungen. Später wenn der Code steht und somit die Größte bekannt ist, kommt alls in die Exe, an die eine Datei angehängt werden kann.) Folgender Source macht Probleme:
Delphi-Quellcode:
Als Fehlermeldung bekomme ich:
const
FILESIZE = 359424; BLOCKSIZE = 65535; function Min(x, y: Cardinal): Integer; begin if x < y then result := x else result := y; end; function Extract(SFXArchive, DestFile: String; SFXFileSize: LongInt): Integer; var FSFXArchive, FDestFile: File; MemBuffer : array [0..BLOCKSIZE] of Byte; BytesToRead, BytesRead: Integer; begin SetLastError(0); BytesToRead := sizeof(MemBuffer); {$IOCHECKS OFF} AssignFile(FSFXArchive, SFXArchive); Reset(FSFXArchive, 1); // ohne Komma 1 geht er nicht in die Schleife rein if IOResult = 0 then begin AssignFile(FDEstFile, DestFile); Rewrite(FDestFile); if IOResult = 0 then begin Seek(FSFXArchive, SFXFileSize); while (BytesToRead > 0) and (not EOF(FSFXArchive)) do begin BlockRead(FSFXArchive, MemBuffer, Min(sizeof(MemBuffer), BytesToRead), BytesRead); BlockWrite(FDestFile, MemBuffer, BytesRead); Dec(BytesToRead, sizeof(MemBuffer)); writeln(BytesToRead); end; end; CloseFile(FDestFile); end; CloseFile(FSFXArchive); {$IOCHECKS ON} result := GetLastError(); end; Zitat:
|
Re: Problem mit BlockRead, BlockWrite
Delphi-Quellcode:
Ich hätte den Anhang so herauskopiert!!!
Seek(FSFXArchive, SFXFileSize);
while not EOF(FSFXArchive) do begin BlockRead(FSFXArchive, MemBuffer, sizeof(MemBuffer), BytesRead); BlockWrite(FDestFile, MemBuffer, BytesRead); end; |
Re: Problem mit BlockRead, BlockWrite
Gleicher Fehler.
Der nächste bitte... :mrgreen: |
Re: Problem mit BlockRead, BlockWrite
Bei
BlockWrite oder BlockRead? |
Re: Problem mit BlockRead, BlockWrite
Gute Frage. Er durchläuft die Schleife korrekt. Nur selbst nach ein paar Durchläufen ist die Datei immer noch 0 Byte groß. :cry:
|
Re: Problem mit BlockRead, BlockWrite
Bei mir hatte das ganze geklappt, nachdem ich die File-Variablen zum File of Byte gemacht und das ,1 entfernt hatte, also:
Delphi-Quellcode:
function Extract(SFXArchive, DestFile: String; SFXFileSize: LongInt): Integer;
var FSFXArchive, FDestFile: File of Byte; MemBuffer : array [0..BLOCKSIZE] of Byte; BytesToRead, BytesRead: Integer; begin SetLastError(0); BytesToRead := sizeof(MemBuffer); {$IOCHECKS OFF} AssignFile(FSFXArchive, SFXArchive); Reset(FSFXArchive); |
Re: Problem mit BlockRead, BlockWrite
Bingo. Das war es. Danke. :P
|
Re: Problem mit BlockRead, BlockWrite
Alternativ:
Delphi-Quellcode:
Rewrite(FDestFile, 1);
|
Re: Problem mit BlockRead, BlockWrite
Manchmal hat man Tomaten auf den Augen! *arrrg*
So ein lappsus ist mir aber auch schon bei BlockWrite und BlockRead untergekommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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