Форум: "Основная";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
ВнизКак ограничить размер текстового файла Найти похожие ветки
← →
лошок (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.016 c