Hallo!
Es geht um folgenden Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| procedure CheckLastTimeSuccessful; var vProgLog: File of Ansichar; vStr: string; vNewName: string; vByte: ansichar; vCount: Integer; begin if FileExists(SysData.ProgLogName) then begin AssignFile(vProgLog, SysData.ProgLogName); try try reset(vProgLog); seek(vProglog, Filesize(vProgLog) - 3); BlockRead(vProgLog, vByte, 1); except MessageDlg('Error occured opening ProgLog-File. Make a Backup, delete' + ' it and restart the program.', mtError, [mbClose], 0, mbClose); Application.Terminate; end; finally Closefile(vProgLog); end;
if vByte <> '~' then begin if MessageDlg('Program crasht last time. Do you want to keep a backup ' + 'of the program Logfile?', mtInformation, [mbYes, mbNo], 0, mbYes) = mrYes then begin vStr := Delete(SysData.ProgLogName, Length(SysData.ProgLogName) - 3, 4); for vCount := 1 to High(Integer) do begin vNewName := vStr + '_Bkp' + inttostr(vCount) + '.log'; if not FileExists(vStr) then begin if RenameFile(SysData.ProgLogName, vStr) then begin break; end; end; end; end; end; end; end; |
Was der Code macht, steht ja eigentlich schon da.
Im ProgrammLog wird bei erfolgreicher Beendigung '~'#13#10 geschrieben. Ich prüfe auf die Tilde, ob das Programm abgestürzt ist. Wenn ja, wird auf Wunsch das Log umbenannt.
Das Proglog ist ein Textfile. SysData.ProglogName ist ein string[255].
Der Fehler E2010 Inkompatible Typen: 'string' und 'procedure, untyped pointer or untyped parameter' tritt in der Zeile auf, in der ich mit Delete die letzten vier zeichen des Namens (also die Extension) löschen möchte.
Was ist da los?
Oder hat jemand eine bessere Lösung, wie ich die letzte Zeile eines u.U. bis zu 1,6 GB großen Textfiles Zeitschonend (ReadLn bis EOF geht also nicht) auslesen kann?
Danke schonmal!
Grüße Kay