Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.02;
Скачать: CL | DM;

Вниз

Как ограничить размер текстового файла   Найти похожие ветки 

 
лошок   (2004-01-20 15:21) [0]

Помогите пожалуйста! Нужно чтобы размер текстового лог-файла был ограничен. Посоветуйте с помощью каких процедур и функциий этого добиться.
Нужно каждый раз при записи лог-фалйа смотреть его размер и удалять в начале файла лишние строки, а как это сделать быстрее всего? Спасибо


 
Плохиш_   (2004-01-20 15:25) [1]

АП уже сказал, что текстовый файл - это устройство последовательного доступа, поэтому только копированием из одного файла в другой


 
Anatoly Podgoretsky ©   (2004-01-20 15:26) [2]

Какой размер?


 
Плохиш_   (2004-01-20 15:44) [3]


> Anatoly Podgoretsky © (20.01.04 15:26) [2]
> Какой размер?

Ну Вам всё расскажи (краснея и смущаясь...)


 
Anatoly Podgoretsky ©   (2004-01-20 15:45) [4]

От этого зависит решение


 
лошок   (2004-01-20 15:50) [5]

размер лог-файла. соответственно самые старые строки надо удалять а новые писать в конец файла.


 
Плохиш_   (2004-01-20 15:54) [6]


> лошок (20.01.04 15:50) [5]
> размер лог-файла. соответственно самые старые строки надо
> удалять а новые писать в конец файла.

Товарисчь не понимает. :-(
У текстового файла можно выделить 2 размера в байтах и в строках, какой интересует.


 
Семен Сорокин ©   (2004-01-20 15:54) [7]

вот мой вариант этого решения:

Info.LogFile - файл
Info.LogSize - нужный размер

procedure CheckLogSize;
var
_f: file of Byte;
_size: Longint;
_diff: longint;
_i: integer;
_strs: TStrings;
begin
if FileExists(Info.LogFile) then begin
AssignFile(_f, Info.LogFile);
Reset(_f);
try
_size := FileSize(_f);
_diff := _size - LOG_SIZES[Info.LogSize] // размер файла больше допустимого
finally
CloseFile(_f)
end;
if _diff > 0 then begin // удаляем все лишнее и первые 10%
_strs := TStringList.Create;
try
_strs.LoadFromFile(Info.LogFile);
_diff := Round(((_diff + LOG_SIZES[Info.LogSize] div 10)/_size)*_strs.Count);
for _i := _diff downto 0 do
_strs.Delete(_i);
_strs.SaveToFile(Info.LogFile)
finally
_strs.Free
end
end
end
end;

{Запись в логфайл}
procedure SaveToLog(const AMessage: string);
var
_file: TextFile;
_date: string;
begin
CheckLogSize;
AssignFile(_file, Info.LogFile);
{$I-}
Append(_file);
{$I+}
if IOResult <> 0 then
Rewrite(_file);
try
_date:= FormatDateTime("[d/mmm/yyyy hh:nn:ss]" + CRLF, Now);
WriteLn(_file, _date + AMessage);
WriteLn(_file, "--------------------------------------------------------------------------");
finally
CloseFile(_file)
end
end;


 
Anatoly Podgoretsky ©   (2004-01-20 15:56) [8]

Нет он не понимает, что когда просят указать размер, надо не общии разглагольствование а указать размер в физических единицах.


 
лошок   (2004-01-20 15:57) [9]

большое спасибо семену сорокину за идеи!


 
Плохиш_   (2004-01-20 15:57) [10]

>Семен Сорокин © (20.01.04 15:54) [7]

Ну вот лишил человека возможности подумать :-(


 
Семен Сорокин ©   (2004-01-20 16:01) [11]

Плохиш_ (20.01.04 15:57) [10]
>Семен Сорокин © (20.01.04 15:54) [7]

Ну вот лишил человека возможности подумать :-(

вот же ... блин
эт я не подумал, ну ничего я там про Info.LogSize немного наврал, подумать придется всетаки :))


 
Anatoly Podgoretsky ©   (2004-01-20 16:02) [12]

А нас возможности узнать размер файла, редиска, в переводе нехороший человек.



Страницы: 1 вся ветка

Текущий архив: 2004.02.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
11-2052
Yozch
2003-05-14 22:38
2004.02.02
Не пойму как поставить статическую картинку на форме


3-1955
WG
2004-01-08 16:57
2004.02.02
Как сохранить текст из BLOB в файл ?


14-2320
CyberFreak
2004-01-11 21:48
2004.02.02
Опять червь? Или у меня мания преследования?...


1-2195
Ozone
2004-01-21 08:47
2004.02.02
Word Document


14-2345
NewD
2004-01-08 11:49
2004.02.02
Как узнать где в реестре прописан коннект при старте системы?