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