Показать сообщение отдельно
  #1  
Старый 10.09.2014, 13:56
ivankom ivankom вне форума
Прохожий
 
Регистрация: 04.02.2014
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию Разбить файл логов

Нужно сделать так, чтобы файл логов не разростался.
Делаю так: если файл больше определенного размера, то переименовываю его и создаю новый.
Нагуглил пару порцедурок.

Код:
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).
Подскажите, как исправить? Или может у кого-нибудь есть по лучше способ избавиться от большого лога?
Ответить с цитированием