Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2009, 01:27   #1
ScreN
Пользователь
 
Аватар для ScreN
 
Регистрация: 27.12.2008
Сообщений: 88
По умолчанию Создание лог-файла

Здравствуйте.. Я уже видать всем тут надоел. Каждый день новая тема.

Ну помогите мне пожалуйста еще раз.

Мне нужно создать лог-файл. В настройках есть пункт Вести логфайл и если стоит галочка. То начинает вестись Лог-файл..

Написал код

Код:
/// Лог файл ///
Procedure TForm1.CreateLogFile;
Var
  F: TextFile;
  Text: String;
  TD: String;
begin
  AssignFile(F, extractfilepath(application.exename)+'Log\LogFile.log');
  Rewrite(F);
   WriteLn(F,'Текст лог-файла');
   CloseFile(F);
  end;
И собственно... хочу сделать что то типа вот этого лога

Код:
Версия программы: 1.0 Beta
[10.01.2009 6:23:50] HH.exe - приложение завершено.
[15.02.2009 6:23:50] HH.exe - приложение запущено
Что мне для этого нужно?
Заранее спасибо!
ScreN вне форума Ответить с цитированием
Старый 10.01.2009, 02:05   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Что мне для этого нужно?
В простейшем случае - по событию OnCreate главной формы записать
"HH.exe - приложение запущено", с указанием системного времени через Format,
а по событию OnClose:
"HH.exe - приложение завершено."

Ну, а "Версия программы: 1.0 Beta" пишите хоть перед каждой упомянутой строкой...
Хотя, на мой взгляд, достаточно один раз - при создании файла.

Последний раз редактировалось mihali4; 10.01.2009 в 02:08.
mihali4 вне форума Ответить с цитированием
Старый 10.01.2009, 04:29   #3
ScreN
Пользователь
 
Аватар для ScreN
 
Регистрация: 27.12.2008
Сообщений: 88
По умолчанию

Сделал не совсем как хотел. Но что то уже сделал.
Вот код:

Код:
/// Лог файл ///
Procedure TForm1.AddLogRun;
Var
 F: TextFile;
 Text: String;
begin
 AssignFile(F, extractfilepath(application.exename)+'Log\LogFile.log');
 if fileexists(extractfilepath(application.exename)+'Log\LogFile.log') then
   append(f) else Rewrite(F);
   WriteLn(F,'Версия программы 1.0 Beta');
  WriteLn(F,'Приложение ffff.exe, запущено успешно');
  CloseFile(F);
 end;

 Procedure TForm1.AddLogClose;
Var
 F: TextFile;
 Text: String;
begin
 AssignFile(F, extractfilepath(application.exename)+'Log\LogFile.log');
 if fileexists(extractfilepath(application.exename)+'Log\LogFile.log') then
   append(f) else Rewrite(F);
  WriteLn(F,'Приложение ffff.exe, завершено успешно');
  CloseFile(F);
 end;
И добавил в создания главной формы FormCreate
Код:
Form1.AddLogRun;
А в закрытие формы FormClose
Код:
Form1.AddLogClose;
Хотел конечно это. Но сделал неправильно. Помогите.
Сейчас попробую объяснить чего хочу добиться.

В настройках программы есть CheckButton называется "Вести лог-файлы"
И нужно так же проверять. Если галочка стоит, то вести логи. Если не стоит, то не вести. Проверку на это я конечно сделаю сам. Но вот как совместить в логи все эти сообщения в одну процедуру?
Я если честно понять ничего не могу. Что то понамутил.. А совместить все вместе не могу.

И как мне сделать запрет на Версия программы 1.0 Бета.. Чтобы вот это в лог записывалось всего один раз.. И при следующем добавлении в лог-файл записи.. Больше не дублировалось. ?

Прошу помочь. Мне осталось дописать совсем чуть чуть. Но сам осилить последние моменты не в состоянии.

И еще подскажите как правильно вставить дату перед (Приложение успешно запущено).
Спасибо!

Последний раз редактировалось ScreN; 10.01.2009 в 04:43.
ScreN вне форума Ответить с цитированием
Старый 10.01.2009, 06:03   #4
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

пишется одна процедура
Код:
var
  log: tstrings; // голобальная переменная
//на FormCreate ты ее создаешь
procedure Tform1.Formcreate(sender: Tobject);
begin
Log:=tstringlist.create;
addlog('Версия программы 1.0 Beta');
addlog('Программа запущена');
end;

//на FormClose; ты ее сохраняешь и уничтожаешь
procedure Tform1.Formclose(sender: Tobject);
begin
Log.Savetofile(Filename);
Log.free;
end;

procedure AddLog(text: string);
begin
  if AddLogCheckBox.checked then
  begin
  log.add(timetostr(now)+' '+text);
  end;
end;

// и в любом месте программы ты просто вызываешь процедуру и все
Перед тем как спросить ищи на форуме и в GOOGLE

Последний раз редактировалось KORN; 10.01.2009 в 13:48.
KORN вне форума Ответить с цитированием
Старый 10.01.2009, 12:29   #5
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

Я бы посоветовал так:
1. Создать глобальную переменную текстового типа.
2. Создать процедуру, которая бы добавляла переменную в файл лога.
3. В месте программы, где требуется записать данные, делаем так:
Записываем данные в переменную, например ( <Дата и время> - Application run.).
После чего вызываем процедуру записи.
Очищаем переменную.
JamS007 вне форума Ответить с цитированием
Старый 10.01.2009, 13:47   #6
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

а я что сделал по твоему7
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 10.01.2009, 13:58   #7
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Код:
var
  FileName: string = '';

Procedure TForm1.WriteLog(Line: string);
Var
 F: TextFile;
 Text: String;
begin
 if not Box.Checked then // проверим нужно ли писать
   exit;

 if FileName = '' then
   FileName := extractfilepath(application.exename)+'Log\LogFile.log';

 AssignFile(F, FileName);

 if fileexists(FileName) then
   append(f) 
 else 
 begin
   Rewrite(F);
   WriteLn(F,'Версия программы 1.0 Beta');
 end;

  WriteLn(F,DateTimeToStr(Now) + ': ' + Line);
  CloseFile(F);
 end;
Дальше там где надо пишем
Код:
WriteLog('Запущено или незапущено :) ');
s.Creator вне форума Ответить с цитированием
Старый 11.01.2009, 00:01   #8
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Вот как я делаю

Код:
function WriteLog(log : string; f : pchar):string;
var
  logs : TStringList;
begin
  logs := TStringList.Create;
  if (FileExists(Pchar(f))) then
  begin
    logs.LoadFromFile(Pchar(f));
    logs.Add(DateTimeToStr(now)+': '+log);
    logs.SaveToFile(f);
  end
  else
  begin
    logs.Add(DateTimeToStr(now)+': '+log);
    logs.SaveToFile(f);
  end;
  logs.Free;
end;
Потом где нужно добовляеш код

Код:
WriteLog('Успешно записал сообщение в лог.','logs.txt');

Последний раз редактировалось QunneD; 11.01.2009 в 00:15. Причина: Забыл сделать чтобы отображалась дата
QunneD вне форума Ответить с цитированием
Старый 11.01.2009, 11:28   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

QunneD, не обижайтесь, но код крайне неэффективен: вы же при записи каждой строки ПОЛНОСТЬЮ считываете Ваш Логфайл в память (да ещё при этом идёт разбор файла построчно).
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу лог в Мастдае Elm0 Свободное общение 4 09.02.2010 15:27
Создание файла Nowise Паскаль, Turbo Pascal, PascalABC.NET 7 04.04.2008 19:55
Создание файла BigRem Общие вопросы Delphi 8 06.01.2008 16:52
создание файла из excel __madD__ Microsoft Office Excel 1 26.09.2007 16:54
Создание файла Хs-You Общие вопросы Delphi 4 22.08.2007 22:04