Autor Beitrag
Kay E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: Di 10.05.11 14:38 
Hallo!

Es geht um folgenden Code:
ausblenden volle Höhe Delphi-Quelltext
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:
//Checks whether the program was finished successful last time it was used or
//not; if not, user will be asked if he wants to store the old ProgLog; if yes
//Proglog will be renamed
//Procedure is called before a new Proglog is started
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) - 34);
        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
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Di 10.05.11 15:54 
Delphihilfe schreibt: procedure Delete(var S: string; Index, Count:Integer). Also
ausblenden Delphi-Quelltext
1:
2:
vStr := SysData.ProgLogName;
Delete(vStr, Length(vStr) - 34);
oder
ausblenden Delphi-Quelltext
1:
vStr := copy(SysData.ProgLogName, 1, Length(SysData.ProgLogName) - 4);					
Kay E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: Di 10.05.11 16:23 
Oh mann :shock:
Manchmal sieht man den Wald vor lauter Bäumen nicht mehr. Das ist ja schon richtig peinlich, v.a. wenn ich bedenke, dass ich da über ne halbe Stunde den Fehler nicht gefunden hab :oops:

Vielen lieben Dank!