![]() |
Speicherfehler beim Schreiben & Lesen von Records
Hallo...
Ich möchte gern einen Record speichern und wieder lesen. Beim lesen der Datei kommt es aber zu der Meldeung: --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00453E35 in Modul 'Project1.exe'. Lesen von Adresse 00000005'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- Ich bin leider zu doof den Fehler zufinden. Ich hoffe einer von Euch kann mir helfen. Hier mal mein Code
Delphi-Quellcode:
Danke schonmal im Vorraus.
type
pFileInfo = ^TFileInfo; TFileInfo = Packed Record Name: String; Adresse: String; Count: Cardinal; // ist grad nicht so wichtih -> wird später benötigt end; var Form1: TForm1; FileInfo: pFileInfo; F: File of pFileInfo; implementation {$R *.dfm} procedure SchreibeDatei(Filename, Name, Adresse: String; Count: Cardinal); var I: Integer; begin New(FileInfo); FileInfo.Name := Name; FileInfo.Adresse := Adresse; FileInfo.Count := Count; AssignFile (F, Filename); ReWrite(F); for I := 1 to 3 do write(F, pFileInfo(I)); CloseFile(F); Dispose(FileInfo); end; function HoleAdresse(Filename, Name: String): String; begin New(FileInfo); AssignFile(F, Filename); Reset(F); Read(F, FileInfo); CloseFile(F); Result := FileInfo.Adresse; Dispose(FileInfo); end; procedure TForm1.Button1Click(Sender: TObject); begin SchreibeDatei('.\Adr.dat', 'Ulli', 'Zuhause', 0); // Einen Eintrag speichern showmessage(HoleAdresse('Adr.dat', 'Ulli')); // ausgabe soll sein 'Zuhause' end; |
Re: Speicherfehler beim Schreiben & Lesen von Records
Delphi-Quellcode:
Du schreibst in deine Datei nur Pointer, keine Records. :)
type
pFileInfo = ^TFileInfo; TFileInfo = Packed Record Name: String; Adresse: String; Count: Cardinal; // ist grad nicht so wichtih -> wird später benötigt end; ... F: File of pFileInfo; |
Re: Speicherfehler beim Schreiben & Lesen von Records
Ich habe die Function jetzt mal geändert
Delphi-Quellcode:
Leider ist aber das Result = ''
procedure SchreibeDatei(Filename, Name, Adresse: String; Count: Cardinal);
var I: Integer; begin New(FileInfo); FileInfo.Name := Name; FileInfo.Adresse := Adresse; FileInfo.Count := Count; AssignFile (F, Filename); ReWrite(F); write(F, FileInfo); CloseFile(F); Dispose(FileInfo); end; |
Re: Speicherfehler beim Schreiben & Lesen von Records
Du schreibst immernoch nur Pointer. Ändere die Deklaration deines Dateityps und des Records von PFileInfo auf TFileInfo und dann nochmal probieren. Schon allein anhand der Anzahl der Einträge und der resultierenden Datei müsstest du dir leicht ausrechnen können, das es nicht hinhaut. Eine 4 Byte grosse Datei kann nicht die ganzen Daten ungepackt enhalten...
|
Re: Speicherfehler beim Schreiben & Lesen von Records
Du brauchst ein
Delphi-Quellcode:
und kein
file of TFileInfo
Delphi-Quellcode:
weil du in letzteres nur die Adresse deines mit New alloziierten Records schreibst.
file of PFileInfo
// Edit: Mal wieder zu langsam... |
Re: Speicherfehler beim Schreiben & Lesen von Records
Zitat:
|
Re: Speicherfehler beim Schreiben & Lesen von Records
F: File of TFileInfo; Der Compilier ist damit nicht einverstanden: Typ 'TFileInfo' benötigt Finalization - nicht im Dateityp erlaubt :gruebel:
|
Re: Speicherfehler beim Schreiben & Lesen von Records
äh, wie war das Strings sind nicht erlaubt, stelle mal auf kurze Strings um oder nimm TFileStream
Delphi-Quellcode:
//EDIT: geht es hier nur um einen Record oder sollen später weitere folgen :?:
pFileInfo = ^TFileInfo;
TFileInfo = Packed Record Name: String[100]; Adresse: String[100]; Count: Cardinal; // ist grad nicht so wichtih -> wird später benötigt end; |
Re: Speicherfehler beim Schreiben & Lesen von Records
Nein es handelt sich nur um diesen einen Record.
Jetzt funtz mit dem Schreiben und Lesen bis hier her. Aber das nächte Problem wird nicht lange auf sich warten lassen. Dank an alle. |
Re: Speicherfehler beim Schreiben & Lesen von Records
dann nimm eine Ini-Datei, dies dürfte viel einfacher sein!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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