![]() |
wie sicher ist diese procedure?
hi,
ich arbeit momentan an einem ( für meine verhältnisse ) größerem projekt und hab darin auch die ansätze eines eigenen debugsystems verankert ein teil davon ist die folgende procedure;
Delphi-Quellcode:
die procedure soll einfach nur markante erledigte aufgaben dokumentieren, mit timestamp
procedure Log(Text: string);
var LogFile: TextFile; TDTempStr: string; begin DateTimeToString(TDTempStr, 'dd.mm.yyyy hh:nn:ss', Now()); TDTempStr := TDTempStr + ': ' + Text; AssignFile(LogFile, 'Data/Log.txt'); Append(LogFile); Writeln(LogFile, TDTempStr); Flush(LogFile); CloseFile(LogFile); end; ich habe gesehen das viele von euch mit try..expect / finally arbeiten und würde gerne wissen wann ihr das macht um welche fehler genau abzufangen und wie ihr die obere procedure ändern würdet? Vielen Dank im voraus MfG tn_der_pate |
Re: wie sicher ist diese procedure?
Hallo,
knallen wirds in 2 Fällen: 1) Deine Logfile existiert noch nicht, dann klappt Append nicht 2) Deine Logfile ist Read-only Ich würd also noch nach Existenz der Logfile prüfen, und gegebenfalls Append rsp. Rewrite nutzen. |
Re: wie sicher ist diese procedure?
Hai,
ich würde, so wie Jelly es vorgeschlagen hat, prüfen ob die Logdatei vorhanden ist. Ausserdem solltest Du in jedem Fall mit try-except Blöcken arbeiten. Da es ja für dein "Debugsystem" ist musst Du dafür sorgen das die Funktion auf keinen Fall selber einen Fehlerverursacht der dein Programm zum Absturz bring ;-) Das hier wäre eine möglichkeit. Wenn Du den except-Teil noch verfeinerst kannst Du in deinem Programm noch auswerten warum der Aufruf der Funktion fehlgeschlagen ist.
Delphi-Quellcode:
function Log(Text: string) : Integer;
const filename = 'Data/Log.txt'; var LogFile: TextFile; TDTempStr: string; errorlevel : Integer; begin errorlevel := 0; // Keine Fehler try DateTimeToString(TDTempStr, 'dd.mm.yyyy hh:nn:ss', Now()); TDTempStr := TDTempStr + ': ' + Text; AssignFile(LogFile, filename); if not (FileExists(filename)) then begin Rewrite(logfile); end else begin Append(LogFile); end; Writeln(LogFile, TDTempStr); Flush(LogFile); CloseFile(LogFile); except errorlevel := 1; // Fehler end; result := errorlevel; end; |
Re: wie sicher ist diese procedure?
Hallo
Zitat:
Beispiel
Delphi-Quellcode:
Try Finally/Except ist auch immer angesagt, wenn das Programm auf irgendetwas externes zugreift.
var
Liste : TStringList; begin Liste:=TStringList.Create; Try ... Liste.LoadFromFile(...); // Hier kann immer etwas schief gehen ... Finally Liste.Free end; end; Z.B. Schnittstellen, Festplatte, COM/DCOM, LAN usw. Denn diese Dinge liegen außerhalb Deines Machtbereiches. D.h. da kann alles passieren. |
Re: wie sicher ist diese procedure?
Bei mir läuft Folgendes. ^^
Ich hab da allerdings noch 'ne Log-Anzeige mitlaufen ...
Delphi-Quellcode:
Procedure TForm1.Log_Add(S: String);
Const Dateiname = 'Verwaltung-Log.txt'; Var D: TextFile; Begin AssignFile(D, Dateiname); {$I-} Append(D); If IOResult <> 0 Then Rewrite(D); If IOResult <> 0 Then If FileExists(Dateiname) Then Begin FileSetAttr(Dateiname, FileGetAttr(Dateiname) and not (faReadOnly or faHidden or faSysFile)); Append(D); End Else Rewrite(D); {$I-} If S = '' Then WriteLn(D, '') Else WriteLn(D, DateTimeToStr(Now, FormatSettingsLang) + ' ' + S); Flush(D); CloseFile(D); Memo094.Lines.BeginUpdate; While Memo094.Lines.Count > 17 do Memo094.Lines.Delete(0); Memo094.Lines.Add(TimeToStr(Now) + ' ' + S); Memo094.Lines.EndUpdate; Application.ProcessMessages; End; |
Re: wie sicher ist diese procedure?
Vielen dank schonmal für die antworten
könnt ihr mir noch erklären wann man try finally und wann try except hernimmt? MfG tn_der_pate |
Re: wie sicher ist diese procedure?
Hallo, manchmal hilft es wenn man die Delphihilfe liest.
Text unten ist direkt von dort kopiert. In einer try...except-Anweisung werden zuerst die Programmzeilen in Anweisungsliste ausgeführt. Werden dabei keine Exceptions ausgelöst, wird ExceptionBlock ignoriert und die Steuerung an den nächsten Programmteil übergeben. In manchen Situationen muss sichergestellt sein, dass bestimmte Operationen auch bei Auftreten einer Exception vollständig abgeschlossen werden. Wenn beispielsweise in einer Routine eine Ressource zugewiesen wird, ist es sehr wichtig, dass sie unabhängig von der Beendigung der Routine wieder freigegeben wird. In diesen Fällen können try...finally-Anweisungen verwendet werden. |
Re: wie sicher ist diese procedure?
danke nochmal
MfG tn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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