Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   try & except Problem (https://www.delphipraxis.net/71766-try-except-problem.html)

netscanner 20. Jun 2006 19:47


try & except Problem
 
Delphi-Quellcode:
try
assignfile (datei, 'rekord.txt');   //rekord wird geladen
reset (datei);
readln (datei, rekordhalter);
readln (datei, punkttxt);
closefile (datei);
except
 reset (datei);
rewrite (datei, 'NoName');
rewrite (datei, '10');
closefile (datei);assignfile (datei, 'rekord.txt');

 end ;
Hier ist mein Try Except Befehl - er bringt trotzdem einen fehler :(

warum?

inherited 20. Jun 2006 19:51

Re: try & except Problem
 
Wenn du es mit Debugger startest? Dann wird trotzdem ein Fehler angezeigt. Später, wenn du nur die exe nimmst, sollte der Fehler nicht mehr angezeigt werden

netscanner 20. Jun 2006 19:53

Re: try & except Problem
 
tut er aber....dann sagt er mir file not found

inherited 20. Jun 2006 19:57

Re: try & except Problem
 
Schau dir lieber mal Delphi-Referenz durchsuchenTFileStream an
Das was du nimmst ist die konservative methode^^
Was bezweckst du mit
Delphi-Quellcode:
rewrite (datei, 'NoName');
rewrite (datei, '10');

netscanner 20. Jun 2006 19:58

Re: try & except Problem
 
was bewirkt TFileStream ????
hab nur noch heute abend zeit mein problem zu lösen....

Matze 20. Jun 2006 19:59

Re: try & except Problem
 
Zitat:

Zitat von netscanner
was bewirkt TFileStream ????

Mal in die OH geschaut?

netscanner 20. Jun 2006 20:03

Re: try & except Problem
 
...so wie ich sehe kann ich mit TFileStream aber auch nicht checken ob die datei da ist oder net....

Helmi 20. Jun 2006 20:07

Re: try & except Problem
 
Zitat:

Zitat von netscanner
...so wie ich sehe kann ich mit TFileStream aber auch nicht checken ob die datei da ist oder net....

Dann schau dir mal FileExists an

McLane 20. Jun 2006 20:59

Re: try & except Problem
 
Zitat:

Zitat von netscanner
Delphi-Quellcode:
try
assignfile (datei, 'rekord.txt');   //rekord wird geladen
reset (datei);
readln (datei, rekordhalter);
readln (datei, punkttxt);
closefile (datei);
except
 reset (datei);
rewrite (datei, 'NoName');
rewrite (datei, '10');
closefile (datei);assignfile (datei, 'rekord.txt');

 end ;
Hier ist mein Try Except Befehl - er bringt trotzdem einen fehler :(

warum?

warum trotzdem ein fehler kommt: wenn das assignfile schon fehlschlegt ist datei ein nicht initialisierter Zeiger. In deinem Except Bereich läufst du also zwangsläufig in dem Fall auf einen Fehler...

jbg 21. Jun 2006 06:15

Re: try & except Problem
 
Zitat:

Zitat von McLane
wenn das assignfile schon fehlschlegt ist datei ein nicht initialisierter Zeiger.

Nur das AssignFile() recht selten fehlschlägt, da es die Datei nicht anrührt. Es setzt nur die Funktionszeiger und den Dateinamen im "datei"-TTextRec Record.

atreju2oo0 21. Jun 2006 06:27

Re: try & except Problem
 
mach aus dem rewrite mal nen normales write...

Waldteufel 21. Jun 2006 07:01

Re: try & except Problem
 
Zitat:

Zitat von atreju2oo0
mach aus dem rewrite mal nen normales write...

Aber nur aus dem zweiten. ;-) Rewrite öffnet nämlich die Datei...

alzaimar 21. Jun 2006 07:15

Re: try & except Problem
 
Zitat:

Zitat von Waldteufel
Zitat:

Zitat von atreju2oo0
mach aus dem rewrite mal nen normales write...

Aber nur aus dem zweiten. ;-) Rewrite öffnet nämlich die Datei...

Stimmt zwar, aber im Kontext des Codes ist es falsch (WriteLn statt Write, beide auf Writeln, dafür das Reset auf Rewrite):
Delphi-Quellcode:
try
  assignfile (datei, 'rekord.txt');   //rekord wird geladen
  reset (datei);
  readln (datei, rekordhalter);
  readln (datei, punkttxt);
  closefile (datei);
except
  reset (datei);
  rewrite (datei, 'NoName');
  rewrite (datei, '10');
  closefile (datei);
  assignfile (datei, 'rekord.txt');
end;
Da stimmen mehrere Sachen nicht.
  • Erstmal muss das AssignFile VOR das Try.
  • 'Reset' öffnet eine Datei zum Lesen, 'Rewrite' öffnet sie zum Schreiben, initialisiert sie aber (sie ist also nach dem Rewrite komplett leer).
  • Den Dateinamen solltest Du irgendwo als Konstante deklarieren.
  • Dein Codefragment setzt 'Rekordhalter' und 'PunkteTxt' nur dann, wenn die Datei existiert, sonst ist der Inhalt der Variablen undefiniert.
Dann würde ich das anders lösen: Der Inhalt der Datei kann nur gelesen werden, wenn die Datei auch existiert, bzw. wird sie mit Vorgabewerten belegt, wenn sie noch nicht exisitiert:
Delphi-Quellcode:
Const
  MyFilename = 'rekord.txt';
  VorgabeName = 'NoName';
  VorgabePunkte = '10';
...
  assignfile (datei, MyFileName);  
  If Not FileExists (MyFileName) Then Begin // Wenn die Datei nicht existiert, wird sie mit Vorgabewerten belegt
    ReWrite (datei);                       // Öffnet die Datei zum Schreiben und setzt den Dateiendezeiger nach vorne
    Try                                    // Fehlerbehandlung für 'rewrite' fehlt.
      rekordhalter := VorgabeName;         // Jetzt sind die Variablen belegt
      PunktTxt := VorgabePunkte;
      WriteLn (datei, RekordHalter);       // Vorgabewerte in die Datei schreiben
      WriteLn (datei, PunktTxt);
    Finally
      CloseFile (Datei);
    End
  End
  Else Begin                               // Datei existiert, kann also gelesen werden
    reset (datei);                         // Hier müsste noch eine komplette Fehlerbehandlung rein
    Try                                    // Denn die Datei kann gesperrt sein, oder sonstwas
      readln (datei, rekordhalter);
      readln (datei, punkttxt);
    Finally
     closefile (datei);
    End
  End;
...
Die Fehlerbehandlung für das Öffnen der Datei kann man durch umschließen der gesamten Routine mit einem Try...Except erreichen, nurdas das etwas ungenau ist.


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