![]() |
access violation Cannot read
Hallo zusammen,
habe mit folgendem Code ein kleines Problem. Wollte eine ganz galante Lösung machen um ein Textfile einzulesen. Ich weiss, hätte es auch mit Readln und den ganzen alten Pascal Funktionen machen können. Habe aber nun mit untenstehender Funktion ein kleines Problem. NAch FreeMem bekomme ich nämlich eine access violation... Jemand ne Idee?
Code:
Gruss Günter
procedure Languageeinlesen;
var iFileHandle: Integer; iFileLength: Integer; iBytesRead: Integer; Buffer: PChar; i: Integer; x: string; begin try iFileHandle := FileOpen('AMS.LG', fmOpenRead); iFileLength := FileSeek(iFileHandle,0,2); FileSeek(iFileHandle,0,0); Buffer := PChar(AllocMem(iFileLength + 1)); iBytesRead := FileRead(iFileHandle, Buffer, iFileLength); FileClose(iFileHandle); for i := 0 to iBytesRead-1 do begin StringGrid1.RowCount := StringGrid1.RowCount + 1; StringGrid1.Cells[1,i+1] := Buffer[i]; StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i])); end; finally FreeMem(Buffer); |
Hallo Guenni_D,
wenn eine der ersten beiden Zeilen eine Exception auslöst, ist Buffer noch undefiniert (Nil) und FreeMem läuft auf einen Fehler. |
Moin Günter,
probier's mal so:
Code:
Wichtig ist beim Lesen Buffer[0], sonst schreibt die Leseroutine in's Nirvana.
begin
iFileHandle := FileOpen('c:\AMS.LG', fmOpenRead); if iFileHandle <> INVALID_HANDLE_VALUE then begin try iFileLength := FileSeek(iFileHandle,0,2); FileSeek(iFileHandle,0,0); Buffer := PChar(AllocMem(iFileLength + 1)); try iBytesRead := FileRead(iFileHandle,Buffer[0], iFileLength); for i := 0 to iBytesRead-1 do begin StringGrid1.RowCount := StringGrid1.RowCount + 1; StringGrid1.Cells[1,i+1] := Buffer[i]; StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i])); end; finally FreeMem(Buffer,iFileLength+1); end; finally FileClose(iFileHandle); end; end; end; ***EDIT*** Es ist übrigens recht gefährlich keinen Pfad für die Datei mit anzugeben, und sei es, mit ExtractFilePath(paramstr(0)), relativ zum Programm. So wie Du es geschrieben hast, greifst Du auf die Datei relativ zum Arbeitsverzeichnis zu, und das kann leicht schiefgehen. |
Danke.....
lag tatsächlich daran, dass ich relativ zuzm Pfad zugegriffen hab....
Danke für den Tip. Gruss Günter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 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