Наверное лучше так построить эту процедуру, заполнение патч-переменной fn предпочтительно выполнить всего один раз, напр. при создании формы - прога по-любому во время выполнения никуда не денется
Код:
var
fn: string;
...
procedure AddToLog(s: string);
var
f: TextFile;
begin
AssignFile(f, fn);
if FileExists(fn) then Append(f) else Rewrite(f);
Writeln(f, DateTimeToStr(Now) + s);
if FileSize(f) > 100 then
begin
CloseFile(f);
RenameFile(fn, ChangeFileExt(ExtractFileName(fn), '') +
FormatDateTime('dd-mm-yyyy hh-nn-ss', Now) + '.txt');
end else CloseFile(f);
end;
в текстовом файле функция
FileSize возвращает кол-во строк а не байтов, причём строкой считается кусок в 255 знаков, т.е. пока он не будет ими заполнен перехода на следующую строку не произойдёт, это нужно учитывать