Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   untypisierte dateien - warum eine zugriffsverletzung(simpel) (https://www.delphipraxis.net/19828-untypisierte-dateien-warum-eine-zugriffsverletzung-simpel.html)

KoRn117 9. Apr 2004 16:18


untypisierte dateien - warum eine zugriffsverletzung(simpel)
 
hi,

das was ich gerade mal ausprobieren wollte ist eine untypisierte datei zu lesen...

Das problem:
^^^^^^^^^^^^

ich kann sie lesen und auch wieder schließen, aber ich bekomme trotzdem eine speicherverletzungsfehlerkladeradatsch...

könnt ihr mal bitte gucken, woran es liegen könnte?

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var datei : file;
    Buf: array[0..4] of Char;
    countt :integer;
    tmp : string;
    i : integer;
begin

assignFile(datei,'asd.wav');
reset(datei);

BlockRead(datei,buf,sizeof(buf),countt);

tmp:='';
for i:=0 to 3 do
  begin
  tmp:=tmp+buf[i];
  end;

showmessage(inttostr(countt));
showmessage(tmp);

closefile(datei);

end;
vielen dank

ach und ich hab delphi in der schrittweisen compelierung gestartet und er hat erst nach dem letzten oder beim letzten
Delphi-Quellcode:
end
gemeckert :gruebel:

Alter Mann 9. Apr 2004 16:26

Re: untypisierte dateien - warum eine zugriffsverletzung(sim
 
Hi KoRn117,

versuch es so:

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var datei : file;
    Buf: array[0..3] of Char; <- 3 und nicht 4
    countt :integer;
    tmp : string;
    i : integer;
begin

assignFile(datei,'asd.wav');
reset(datei);

BlockRead(datei,buf,sizeof(buf),countt);

tmp:='';
for i:=0 to 3 do
  begin
  tmp:=tmp+buf[i];
  end;

showmessage(inttostr(countt));
showmessage(tmp);

closefile(datei);

end;

KoRn117 9. Apr 2004 16:32

Re: untypisierte dateien - warum eine zugriffsverletzung(sim
 
ist mir auch gerade aufgefallen :lol:

aber die fehlermeldung kommt trotzdem immer noch :cry:


...

hboy 9. Apr 2004 16:32

Re: untypisierte dateien - warum eine zugriffsverletzung(sim
 
Hilfe: :warn:
Delphi-Quellcode:
Wird AmtTransferred nicht angegeben, tritt ein E/A-Fehler auf, wenn die Anzahl der gelesenen Datenblöcke nicht mit Count identisch ist. Wenn die Compiler-Direktive $I+ aktiv ist, lösen Fehler eine EInOutError-Exception aus.
und was sagt uns das (kein Plan *g*)

Edit:
Delphi-Quellcode:
procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);

KoRn117 9. Apr 2004 16:41

Re: untypisierte dateien - warum eine zugriffsverletzung(sim
 
ach schon gut...es lag an was anderen...

ich musste bei dem befehl "reset" noch einen weiteren parameter übergeben, der delphi sagt, dass er nur ein byte lesen soll :oops:

ciao

trotzdem danke hboy & altermann

:roll:

KoRn117 9. Apr 2004 16:44

Re: untypisierte dateien - warum eine zugriffsverletzung(sim
 
ich interpretiere das so (@hboy):

count ist das was mitzählt wenn er ausließt und ist das nicht genauso groß wie du ihm gesagt hast was er auslesen soll - meckert er rum.

beispiel:

datei ist "10" groß

ich sag ihm lies "15"

AmtTransferred meldet eine differenz



...so oder so ähnlich wird das schon sein :stupid: :lol:


ciao

hboy 9. Apr 2004 16:46

Re: untypisierte dateien - warum eine zugriffsverletzung(sim
 
*irre* normal ( also bei copy oder stream.readbuffer ) is count eigentlich die länge des zu lesenden Datenblocks.... sehr verwirrend... naja.. :drunken:

KoRn117 9. Apr 2004 17:05

Re: untypisierte dateien - warum eine zugriffsverletzung(sim
 
ist es auch, ich hab mich mal wieder verschrieben

es geht um die differenz zwischen count und dem letzten parameter

count gibt auch hier an wieviel gelesen werden soll...ich hab nur etwas komische variablen bezeichnungen


BlockRead(datei,buf,sizeof(buf),countt);

sizeof(buf) -> das ist die anzahl die er lesen soll (count)
countt -> bei mir die komische vergleichsvariable die angibt, ob er alles lesen konnte

The-X 16. Apr 2004 17:01

Re: untypisierte dateien - warum eine zugriffsverletzung(sim
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var datei : file;
    Buf: array[0..3] of Char; <- 3 und nicht 4
    countt :integer;
    tmp : string;
    i : integer;
begin

assignFile(datei,'asd.wav');
// evtl. Filemode setzen
Filemode:=fmopenread;
reset(datei,1); // hier muss 1 stehen, da recordsize standardmäßig auf 128 bytes steht

BlockRead(datei,buf,sizeof(buf),countt);

tmp:='';
for i:=0 to 3 do
  begin
  tmp:=tmp+buf[i];
  end;

showmessage(inttostr(countt));
showmessage(tmp);

closefile(datei);

end;


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