Нужно сделать так, чтобы файл логов не разростался.
Делаю так: если файл больше определенного размера, то переименовываю его и создаю новый.
Нагуглил пару порцедурок.
Код:
function FileSize(fileName : wideString) : Int64;
var
sr : TSearchRec;
begin
if FindFirst(fileName, faAnyFile, sr ) = 0 then
result := Int64(sr.FindData.nFileSizeHigh) shl Int64(32) + Int64(sr.FindData.nFileSizeLow)
else
result := -1;
FindClose(sr) ;
end;
Код:
procedure AddToLog(s:string);
var
fn:string;
F:TextFile;
name: string;
begin
Fn:=ExtractFilePath(ParamStr(0))+'log.txt';
assignFile(f,fn);
if FileExists(fn) then
begin
// ShowMessage(IntToStr(FileSize(fn)));
if FileSize(fn) > 100 then
begin
name := 'log'+DateTimeToStr(Now);
name := StringReplace(name, '.', '-', [rfReplaceAll, rfIgnoreCase]);
name := StringReplace(name, ':', '-', [rfReplaceAll, rfIgnoreCase]);
name := name + '.txt';
RenameFile(fn,ExtractFilePath(ParamStr(0)) + name);
end
else
begin
Append(f);
end;
end
else Rewrite(f);
Writeln(f, DateTimeToStr(Now)+s);
Flush(f);
CloseFile(f);
end;
Первая проблема, не работает if FileSize(fn) > 100, наверно из-за разных типов данных.
Вторая, вылетает ошибка I/O error 103 после строки кода:
RenameFile(fn,ExtractFilePath(ParamStr(0)) + name);
Файл при этом переименовывается, но не создается новый (log.txt).
Подскажите, как исправить? Или может у кого-нибудь есть по лучше способ избавиться от большого лога?