Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#17

AW: Programm stürzt nach mehren Stunden Laufzeit ab.

  Alt 6. Sep 2021, 17:18
Beispiel 3 habe ich ebenfalls im Internet in einem toutorial geshen und habe nun begonnen dies so abzuändern. Da es wohl so einfach richtig ist

Weshalb aber soll/muss ts:=tstringlist vor den try stehen? Was wäre der nachteil wenn es nach dem try steht? Grössere ressourcen verbrauch? Oder unübersichtlicher da man bei einer exception mehr zu kontrollieren hat?
Weil ansonsten (zumindest theoretisch) die Möglichkeit besteht, dass ts innerhalb des Try / Except bzw. Try / Finally nicht existiert. Zumindest die Kompilerwarnung wird dies aussagen.

Du arbeitest sehr viel mit globalen Variabel, das macht den Quelltext nicht unbedingt leichter les- und verstehbar. Mir ist z. B. noch nicht so ganz klar geworden, wann ts_log nun von wo welche Daten bekommt, wann sie wo unter welchen Bedingungen in die Datei geschrieben werden, ob und ggfls. wann und wie lange ts_log und Memo_log (teilweise) identischen Inhalt haben ...

Viele Deiner Prozeduren könntest Du auch zu Prozeduren des Formulars machen, dann sparst Du Dir schonmal die vielen Form1...

Wahllos rausgegriffen mit der Bitte um "grundsätzliche" Korrektur:
Delphi-Quellcode:
if tdirectory.exists(programmpfad+'LS')=false then tdirectory.CreateDirectory(programmpfad+'LS');
if tdirectory.exists(programmpfad+'RE')=false then tdirectory.CreateDirectory(programmpfad+'RE');
if tdirectory.exists(programmpfad+'ET1')=false then tdirectory.CreateDirectory(programmpfad+'ET1');
if tdirectory.exists(programmpfad+'ET2')=false then tdirectory.CreateDirectory(programmpfad+'ET2');

if form1.CheckBox_autostart.checked=true then form1.Button_start_action.Click;

...

   if ts.Strings[14]='tray:offthen form1.CheckBox_tray.Checked:=false;
   if ts.Strings[15]='autostart:offthen form1.CheckBox_autostart.Checked:=false;
   if ts.Strings[16]='debug:offthen form1.CheckBox_DebugLog.Checked:=false;
   if ts.Strings[17]='hidecmd:offthen form1.CheckBox_verstecke_cmd.Checked:=false;

...

  if form1.CheckBox_tray.Checked=false then ts.Add('tray:off') else ts.Add('tray:on');
  if form1.CheckBox_autostart.Checked=false then ts.Add('autostart:off') else ts.Add('autostart:on');
  if form1.CheckBox_DebugLog.Checked=false then ts.Add('debug:off') else ts.Add('debug:on');
  if form1.CheckBox_verstecke_cmd.Checked=false then ts.Add('hidecmd:off') else ts.Add('hidecmd:on');

...

 if form1.idftp1.DirectoryListing[i].FileName='.'=false then
 if form1.idftp1.DirectoryListing[i].FileName='..'=false then begin
Lieber in dieser Form:
Delphi-Quellcode:
if not tdirectory.exists(programmpfad + 'LS') then tdirectory.CreateDirectory(programmpfad + 'LS');
if not tdirectory.exists(programmpfad + 'RE') then tdirectory.CreateDirectory(programmpfad + 'RE');
if not tdirectory.exists(programmpfad + 'ET1') then tdirectory.CreateDirectory(programmpfad + 'ET1');
if not tdirectory.exists(programmpfad + 'ET2') then tdirectory.CreateDirectory(programmpfad + 'ET2');

if form1.CheckBox_autostart.checked then form1.Button_start_action.Click;

...

form1.CheckBox_tray.Checked := ts.Strings[14] = 'tray:on';
form1.CheckBox_autostart.Checked := ts.Strings[15] = 'autostart:on';
form1.CheckBox_DebugLog.Checked := ts.Strings[16] = 'debug:on';
form1.CheckBox_verstecke_cmd.Checked := ts.Strings[17] = 'hidecmd:on';

...

  ts.Add(IfThen(form1.CheckBox_tray.Checked,'tray:on','tray:off'));
  ts.Add(IfThen(form1.CheckBox_autostart.Checked,'autostart:on','autostart:off'));
  ts.Add(IfThen(form1.CheckBox_DebugLog.Checked,'debug:on','debug:off'));
  ts.Add(IfThen(form1.CheckBox_verstecke_cmd.Checked,'hidecmd:on','hidecmd:off'));

...

 if (form1.idftp1.DirectoryListing[i].FileName <> '.')
 and (form1.idftp1.DirectoryListing[i].FileName <> '..') then begin
Und nein: Da ist jetzt kein Muss, sondern nur als Idee für die eventuelle, zukünftige Beachtung gedacht.
Und vermutlich haben andere dazu auch andere Ansichten.
  Mit Zitat antworten Zitat