Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi E/A-Fehler 998 bei BlockRead :( (https://www.delphipraxis.net/58620-e-fehler-998-bei-blockread.html)

MCQ 9. Dez 2005 17:57


E/A-Fehler 998 bei BlockRead :(
 
Delphi-Quellcode:
function AddToArchive(archive_filename:String;InstallPath:String;FileName:String):boolean;
var fpos_start:cardinal;
    CRC:DWORD;
    buf:array[0..10000] of DWORD;
    OneChar:Char;
    fArchiv,fSource:file;
    gelesen:integer;
    i:integer;
    fName:String;
begin
// Fügt eine Datei dem Archiv hinzu
 CRC:=0;
 OneChar:=#0;
 gelesen:=0;
 AssignFile(fArchiv,archive_filename);
 AssignFile(fSource,FileName);
 reset(fArchiv);
 reset(fSource);
 fpos_start:=filesize(fArchiv);
 seek(fArchiv,fpos_start);
 FName:=InstallPath+ExtractFileName(FileName);
 BlockWrite(fArchiv,CRC,SizeOf(CRC));
 BlockWrite(fArchiv,FName,length(FName));
 BlockWrite(fArchiv,OneChar,SizeOf(OneChar));
 While Not eof(fSource) do
  begin
   BlockRead(fSource,Buf,10000,gelesen);
   BlockWrite(fArchiv,Buf,gelesen);
   For i := 0 to gelesen do
    begin
     CRC:=CRC xor Buf[i];
    end;
  end;
 CloseFile(fSource);
 CloseFile(fArchiv);
end;
Mit dieser Prozedure hab ich angefangen zu versuchen eine Datei in ein eigenes Archiv hinzuzufügen, allerdings stüzt das Programm in der BlockRead-Zeile mit einem E/A-Fehler 998 ab.
Ich konnte leider bisher nichts finden, deshalb hoffe ich hier eine antwort auf die Frage zu finden. Was bedeutet dieser e/A-Fehler 998 und wie kann ich ihn vermeiden?

MCQ 9. Dez 2005 18:07

Re: E/A-Fehler 998 bei BlockRead :(
 
Hab hier im forum nochmal mit anderen Suchbegriffen gessucht und habe den hinweis gefunden in der blockeadzeile das buf zu buf[0] zu ändern. Das hat an meine Prblem allerdings nichts geändert :(

tomsel 9. Dez 2005 18:12

Re: E/A-Fehler 998 bei BlockRead :(
 
Hi,

was der Fehler 998 bedeutet, weiß ich auch nicht aus dem Hut. Allerdings fällt mir auf, dass bei Reset(fSource) die Blockgröße nicht angegeben wird. Der Standardwert für den optionalen Parameter RecSize ist 128 (lt. Delphi-Hilfe). Du ließt also, bei entsprechender Dateigröße, 1280000 Bytes in ein Array mit 10001 Bytes Speicherplatz. Vieleicht ist der Fehler mit Reset(fSource, 1) bereits zu beheben?

Gruß
tomsel

MCQ 9. Dez 2005 18:15

Re: E/A-Fehler 998 bei BlockRead :(
 
jetzt klappt ... thx4hlp :)

Muetze1 9. Dez 2005 18:19

Re: E/A-Fehler 998 bei BlockRead :(
 
Da die Fehlernummern der von Windows WinAPI entsprechen, lässt sich mit
Delphi-Quellcode:
ShowMessage(SysErrorMessage(998));
leicht rausfinden, das es sich um den Fehler "Unzulässiger Zugriff auf einen Speicherbereich" handelt. Daher ist die vorher gut dargelegte Fehlerursache recht wahrscheinlich.

/EDIT: Der rote Kasten wird schmerzlich vermisst...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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