Thema: Delphi Log-Datei realisieren

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#12

Re: Log-Datei realisieren

  Alt 9. Nov 2007, 01:36
ohne Stream gehts genauso ... einfach versuchen die Datei exklusiv zu öffnen
Delphi-Quellcode:
AssignFile(F, LogFile);
FileMode := fmOpenReadWrite or fmShareExclusive;
{$I-}
Append(F);
WriteLn(F, S);
If IOResult <> 0 Then <<ging nich>>;
CloseFile(F);
{$I+}
tja und wenn's nich geht, dann halt 'ne Weile versuchen
Delphi-Quellcode:
AssignFile(F, LogFile);
FileMode := fmOpenReadWrite or fmShareExclusive;
Try
  Repeat
    {$I-} Append(F); {$I+}
    Sleep(10);
  Until IOResult = 0;
  WriteLn(F, S);
Finally
  CloseFile(F);
End;
soooo, und jetzt noch 'ne Zeitbegrenzung und so'n Zeugs rein ... fertsch (denk'sch ma)
Delphi-Quellcode:
Function AddLog(Const LogFile, S: String; TimeOut{ms}: LongWord = 3000): Boolean;
  Var F: TextFile;
    C: LongWord;
    M: Byte;

  Begin
    Result := False;
    M := FileMode;
    FileMode := fmOpenReadWrite or fmShareExclusive;
    AssignFile(F, LogFile);
    Try
      C := GetTickCount;
      While True do Begin
        {$I-} Append(F); {$I+}
        If IOResult = 0 Then Break;
        If GetTickCount - C > TimeOut Then Exit;
        //Application.ProcessMessages;
        Sleep(10);
      End;
      WriteLn(F, S);
      Result := True;
    Finally
      CloseFile(F);
      FileMode := M;
    End;
  End;

If not AddLog('a.log', 'irgendwas muß rein') Then Error...
OK, als WinAPI sieht's och nett aus ^^
Delphi-Quellcode:
Function AddLog(LogFile, S: String; TimeOut{ms}: LongWord = 3000): Boolean;
  Var H: THandle;
    C: LongWord;

  Begin
    Result := False;
    S := S + #13#10;
    C := GetTickCount;
    Repeat
      H := CreateFile(PChar(LogFile), GENERIC_WRITE, 0, nil, OPEN_ALWAYS, 0, 0);
      If H <> INVALID_HANDLE_VALUE Then Begin
        SetFilePointer(H, 0, nil, FILE_END);
        WriteFile(H, S[1], Length(S), C, nil);
        CloseHandle(H);
        Result := True;
        Exit;
      End;
      //Application.ProcessMessages;
      Sleep(10);
    Until GetTickCount - C > TimeOut;
  End;
[add]
ich sollt vielleicht ma weniger nebenbai chatten ... da is doch plötlich 'nen neuer Beitrag drin und sogar mit RedBox ^^

[edit]
immer diese Rechtschreibfehler
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat