AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien und Exceptions

Ein Thema von SiouX · begonnen am 26. Mär 2004 · letzter Beitrag vom 11. Apr 2004
Antwort Antwort
SiouX

Registriert seit: 15. Mai 2003
Ort: Hamburg
14 Beiträge
 
Delphi 6 Personal
 
#1

Dateien und Exceptions

  Alt 26. Mär 2004, 12:33
Hallo,

trotz einiger Tutorials, komme ich mit Dateien & Exceptions nicht klar. z.B. ich möchte eine Datei einlesen. Wie schachtele ich da try.. except & try.. finally ?

Delphi-Quellcode:
procedure DateiEinlesen(Pfad: String; var Datensatz: String);
begin
   AssignFile(Datei,Pfad);
   try
      try
       Reset(Datei);
       read(Datei, Datensatz);
      except
       showmessage('fehler beim lesen');
      end;
      closeFile(Datei); //sollte ich das nicht lieber mit try..finally behandeln? wo? wie kann ich das ganze sinnvoll schachteln?
   except
      showmessage('Kann Datei nicht öffnen');
   end;
end;
im Programm
Delphi-Quellcode:
DateiEinlesen(Dateipfad, Inhalt);
DoSomething(Inhalt); //(*1)
zu (*1) Wenn in DateiEinlesen Fehler aufgetreten sind, dann hat Inhalt evtl. keinen vernünftigen 'Inhalt'? Sollte ich daher DateiEinlesen als Funktion deklarieren mit einem booleschen Rückgabewert oder wird sowas auch durch exceptions verhindert?

Danke
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dateien und Exceptions

  Alt 26. Mär 2004, 12:37
Delphi-Quellcode:
Assignfile(F, Filename);
{$I-}
Reset(F);
if IOResult = 0 then
begin
  // was mit Datei machen
end
else
  ShowMessage('Fehler beim Öffnen der Datei.');
CloseFile(F);
{$I+}
So geht es ohne Exceptions und try-finally.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
SiouX

Registriert seit: 15. Mai 2003
Ort: Hamburg
14 Beiträge
 
Delphi 6 Personal
 
#3

Re: Dateien und Exceptions

  Alt 26. Mär 2004, 12:43
Danke Luckie , ich muss es aber lt. Aufgabenstellung mit Exceptions machen .

Diese Compiler-Schalter {I+} bzw {I-} .. muss man die immer IN der Prozedur schreiben oder gilt es für alle Prozedur/Funktionen in der Unit, wenn man es direkt unter implementation schreibt?
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#4

Re: Dateien und Exceptions

  Alt 26. Mär 2004, 12:44
Hallo SiouX,
sieh Dir mal in der Delphi-Hilfe TFileStream an oder gleich hier, ist viel einfacher und moderner als das Dateihandling unter Pascal.
Yo, ansonsten machst Du das schon ganz gut, bis auf eine Kleinigkeit:
Delphi-Quellcode:
procedure DateiEinlesen(Pfad: String; var Datensatz: String);
begin
   AssignFile(Datei,Pfad);
   try
       Reset(Datei);
       read(Datei, Datensatz);
      except
       showmessage('fehler beim lesen');
      end;
   // anderer Fehler möglich, ergo anderer TryBlock
   try
      closeFile(Datei);
except
      showmessage('Kann Datei nicht öffnen');
   end;
end;
Greetz DANNYBOY
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
SiouX

Registriert seit: 15. Mai 2003
Ort: Hamburg
14 Beiträge
 
Delphi 6 Personal
 
#5

Re: Dateien und Exceptions

  Alt 26. Mär 2004, 12:54
@Dannyboy
hmm.. was für ein Fehler z.b.? Ob die Datei formal korrekt ist (existiert, Endung, Größe) prüfe ich vorher oder meinst du ganz was anderes?
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#6

Re: Dateien und Exceptions

  Alt 26. Mär 2004, 13:08
Bei meinem oberen Try-Except werden Lesefehler abgefangen und beim
unteren ein eventueller Fehler beim Schließen (ist mir allerdings
noch nie passiert). Dein Beispiel macht inhaltlich exakt das Selbe,
nur wenn Du Deine Routinen noch weiter ausbaust und dann mehrere
dieser Try-Except Blöcke hast, dann würde ich sie wegen der Übersicht
nicht schachteln, sondern sequentiell unter einander schreiben.

Zu Deiner anfänglichen Frage:
Ein Finally wird auf jeden Fall ausgeführt, also auch im Falle eines
Fehlers, deswegen kommt das in Deinem Beispiel nicht in Frage.
Wenn die Datei nicht geöffnet werden kann, dann soll sie NICHT geschlossen
werden (da sie bereits geschlossen ist), ergo Except.

Wie Luckie aber schon sagte: Die Try-Catch-Blöcke sind in diesem
Beispiel optional, wenn Du die Compilermeldungen mit {$I-} und {$I+}
ausschaltest. Mit Filestreams ist das alles leichter. Ich komme
auch aus der Pascal-Ecke und habe mich anfangs davor gescheut, aber
das ist meines Erachtens noch einfacher als das Verarbeiten von Dateien
mit den Pascal-Routinen
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Benutzerbild von Ricane
Ricane

Registriert seit: 21. Mär 2003
Ort: Quickborn
170 Beiträge
 
Delphi 7 Architect
 
#7

Re: Dateien und Exceptions

  Alt 11. Apr 2004, 14:29
Hi,

ich habe ein ähnliches Problem... mit folgendem Code arbeite ich...

Delphi-Quellcode:
Procedure TFrmMain.Suchen();
Var

  I, Posi: Integer;
  Datei: File Of Byte;

Begin

  For I := 1 To lstAllFiles.Items.Count - 1 Do
  Begin
    AssignFile(Datei, LstAllFiles.Items[I]);
    Reset(Datei);

    [...]

    DateiSize.Add(IntToStr(FileSize(Datei)));
    CloseFile(Datei);
  End;

End;
Das funktioniert auch ganz gut, aber aber wenn die Datei schreibgeschützt ist, gibt es eine Exception ("Zugriff verweigert"). Warum?! AssignFile setzt doch eh nur ReadOnly oder wie sehe ich das ?!


Beste Grüsse und frohe Ostern,

Ricane
Hendrik
So much to Code... so less Time....

www.RicaneSoftware.de
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Dateien und Exceptions

  Alt 11. Apr 2004, 14:53
Moin Ricane,

AssignFile ist borlandspezifisch und macht eigentlich nicht mehr als, als intern eine Zuordnung zwischen der File Variablen und dem Dateipfad herzustellen.

Entscheidend ist hier Reset, denn diese Prozedure verwendet zum Öffnen der Datei den Modus, der in der Variablen FileMode gespeichert ist. Dies ist standardmässig Read/Write, so dass der Zugriff auf eine schreibgeschützte Datei fehlschlagen muss.

Du müsstest nur die FileMode Variable auf fmOpenRead setzen, bevor Reset aufgerufen wird.
Dann sollte es funktionieren.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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