![]() |
Ließt BlockRead aus Datei nich richtig ein?
Hallo!
Ich glaube mein Computer ist verhext :twisted: ! Ich hab eine Zeichenkette in eine Datei undefinierten Typs geschrieben, und wenn ich die wieder in einen String einlese, + den Inhalt von einem Label mit ihm angleichen möchte, bricht das Programm genau in diesem Moment mit einer Zugriffsverletzung ab. Ich weiß nich mehr weiter. Hier der betreffende Quellcode:
Delphi-Quellcode:
Ich bin gespannt, worans liegt. :kotz:
Var f:file; t,s:string; result:integer;
begin assignfile(f,'c:\f.txt'); rewrite(f); s:='blob'; blockwrite(f,s,1); closefile(f); reset(f); blockread(f,t,1,result); closefile(f); label1.caption:=t; end. PAX |
Re: Ließt BlockRead aus Datei nich richtig ein?
Hallo Pax,
also hier deine Lösung:
Delphi-Quellcode:
Mfg
Var f:file; s:string; result:integer;
begin assignfile(f,'c:\f.txt'); rewrite(f); s:='blob'; blockwrite(f,s,1); closefile(f); reset(f); blockread(f,s,1,result); closefile(f); label1.caption:=s; end. [edit=Luckie]Code-Tags durch Delphi-Tags ersetzt. Mfg, Luckie[/edit] |
Re: Ließt BlockRead aus Datei nich richtig ein?
Ich würde mal die Variable result umbenennen. Result ist eine interne Variable für den Rückgabewert einer Funktion.
Desweiteren, kuck dir deinen Code mal an. Was machts du denn:
@WtF: Warum postest du seinen nicht funktionierenden Code noch mal? :roll: |
Re: Ließt BlockRead aus Datei nich richtig ein?
Zitat:
So funktioniert es: Blockread/-write arbeiten mit Speicherbereichen, aus denen bzw. in die geschrieben wird. D.h. man sollte vorher die Buffer-Bereiche reservieren.
Delphi-Quellcode:
Gruß, teebee
Var f:file;
res:integer; s,t: Array[0..127] of Char; begin assignfile(f,'c:\f.txt'); rewrite(f); s:='blob'; blockwrite(f,s,1); closefile(f); reset(f); blockread(f,t,1,res); closefile(f); label1.caption:=t; end; |
Re: Ließt BlockRead aus Datei nich richtig ein?
Aber das CloseFile hebt die Verknüpfung von der Datei zur Dateivariabeln doch wieder auf oder irre ich da? Dazu die Delhi-Hilfe:
Zitat:
|
Re: Ließt BlockRead aus Datei nich richtig ein?
Hallo Luckie,
dieser Pascal-Datentyp ist in Wirklichkeit in Record in dem uA ein Datei-Handle abgelegt wird, dass mit Close geschlossen wird. Überzeuge Dich selbst:
Delphi-Quellcode:
type
PTextRec = ^TTextRec; begin AssignFile(myFile, AFileName); Writeln(PTextRec(@myFile)^.Name); Reset(myFile); try Writeln(PTextRec(@myFile)^.Name); finally Close(myFile); Writeln(PTextRec(@myFile)^.Name); end; end; |
Re: Ließt BlockRead aus Datei nich richtig ein?
Zitat:
|
Re: Ließt BlockRead aus Datei nich richtig ein?
@Luckie : weil der nicht funktionierende code so funktioniert :wink:
Zuerst dachte ich auch das es an der variable result liegt - ist aber nicht so - ich habs extra ausprobiert.
Code:
Das eine close kann man nat. weglassen...
procedure TForm1.Button1Click(Sender: TObject);
Var f:file; s:string; r:integer; begin assignfile(f,'c:\f.txt'); rewrite(f); s:='blob'; blockwrite(f,s,1); reset(f); blockread(f,s,1,r); closefile(f); Label1.Caption:=s; end; |
Re: Ließt BlockRead aus Datei nich richtig ein?
Zitat:
Delphi-Quellcode:
funktioniert.
AssignFile(myFile, AFileName);
Reset(myFile); Close(myFile); Reset(myFile); Readln(myFile, myByte); Zitat:
Code:
wie man sieht, wird das Handle nach dem erfolgreichen Aufruf in die Struktur innerhalb des File-Datentyps zurückgeschrieben.
LEA EAX,[EBX].TFileRec.Name
PUSH EAX CALL CreateFileA CMP EAX,-1 JZ @@error MOV [EBX].TFileRec.Handle,EAX |
Re: Ließt BlockRead aus Datei nich richtig ein?
Zitat:
@PAX: Ich glaube, es wäre einfacher, ein File of Char zuverwenden, dann kannst Du bequem read/write/ln benutzen. Gruß, teebee |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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