Как програмно создать log файл ?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Андрей Васюта
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 20.07.2004 (Вт) 19:40

Как програмно создать log файл ?

Сообщение Андрей Васюта » 21.10.2004 (Чт) 19:31

Как програмно создать log файл ?
Для примера: В нем будет розмещаться информация о времени запуска программы. :D
Большой программе - большие глюки.

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 21.10.2004 (Чт) 19:43

А в чем собстенно сложность:
Код: Выделить всё
Private Sub Form_Load()
Open "C:\windows\logfile.log" For Append As #1
    Print #1, "Програма запущена " & Now
Close
End Sub

Private Sub Form_Unload(Cancel As Integer)
Open "C:\windows\logfile.log" For Append As #1
    Print #1, "Програма закрыта " & Now
Close
End Sub
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 19:57

Ага, и если Злой Юзер поставит на C:\windows\logfile.log рид-онли, то программа уже никогда не запустится :-)
Изображение

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 22.10.2004 (Пт) 0:11

tyomitch писал(а):Ага, и если Злой Юзер поставит на C:\windows\logfile.log рид-онли, то программа уже никогда не запустится :-)
НУ Злой Юзер может и папку "windows" удалить :-) (это недавно где-то тут обсуждалось). А про обработку ошибок - это само собой!
Можно также и атрибуты програмно менять, и файл считывать - убивать - заново записывать.
Я же самый банальный пример привел!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 22.10.2004 (Пт) 1:17

Вот ща написал пару функций для работы с лог файлами.

Public sub WriteToLog (LogFile as String, Text as String)
On error resume next
if dir(LogFile) = "" Then Msgbox "LogFile ''" & logfile & "'' is not found" , vbinformation , "No logfile":exit sub
close #1 'Вдруг до этого, кто-то, чего-то открывал...
open logfile for append as #1
print #1, Text
print #1, ""
close #1
End sub

Public Sub ClearLog (LogFile as string)
on error resume next
close #1
open logfile for output as #1
close #1
End Sub

Public Function GetLogText (LogFile As String) As String
Dim Tmp as string
on error resume next
if dir(LogFile) = "" Then Msgbox "LogFile ''" & logfile & "'' is not found" , vbinformation , "No logfile":exit function
open logfile for input as #1
while eof(1) = false
line input #1,tmp
getlogtext = getlogtext & tmp & vbcrlf
wend
close #1
End Function

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 22.10.2004 (Пт) 7:48

Я использую такую процедуру.
Лежит она у меня в общем модуле.
Код: Выделить всё
Public Sub SaveLog(ByVal sMsg As String)
    Dim fnum As Integer
    Dim LogFile As String
    On Error Resume Next
    LogFile = gAppPath & "\" & "FBRlog.log"
    fnum = FreeFile
    Open LogFile For Append As fnum
        Print #fnum, Now & vbTab & "- " & sMsg
    Close fnum
End Sub

Вызываю из любой процедуры так
SaveLog("Запустились.")
или
SaveLog("Закрываемся.")

Разумеется gAppPath и "FBRlog.log" подставляем свои.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 23.10.2004 (Сб) 16:32

А кто знает (может это даже не для это топика) может обяснить, для чего в VB в объекте App есть какой-то лог (свойства, процедуры) для чего этот лог вообще нужен?? Всегда интерестно было!
On Fatal Error Resume Next

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.10.2004 (Сб) 16:43

Чтобы писать в Event Log WinNT.
Открой Программы -> Настройка -> Панель управления -> Администрирование -> Просмотр событий, и ты поймёшь, что это.
Изображение

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 23.10.2004 (Сб) 16:46

Дык, что получается эта щтука только под NT нужна, в 9x/Me от них толку не какого?
On Fatal Error Resume Next

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.10.2004 (Сб) 16:49

Получается так... В Win9x она точно так же пишет в обычный файл, как и все представленные здесь функции.
Изображение

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Как програмно создать log файл ?

Сообщение Saturn.65 » 14.01.2009 (Ср) 14:17

Код: Выделить всё
Private Sub Form_Load()
Open "C:\windows\logfile.log" For Append As #1
    Print #1, "Програма запущена " & Now
Close
End Sub

Скажите, а как сделать, чтоб писать не одну строку, а сколько нужно? К примеру выводить данные из разных textbox? Вывести то я их вывел, но все время пишу этот же код для каждой строки, только меняю цифры в Print # и в Append As #. Наверное это глупо, но работает.
Наверное можно сделать как-то проще, чтоб было как-то так:
Код: Выделить всё
Open "C:\windows\logfile.log" .....(здесь надо как-то написать, чтоб было много строчек)
Print #1, (Text1.Text)
Print #2, (Text2.Text)
Print #3, (Text3.Text)
Close
Главное, ребята, сердцем не стареть...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как програмно создать log файл ?

Сообщение Хакер » 14.01.2009 (Ср) 15:06

Это не может работать, цифра обозначает номер файла.

Вывести — как обычно, одним вызовом Print. В чём проблема-то?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Re: Как програмно создать log файл ?

Сообщение RayShade » 14.01.2009 (Ср) 15:28

Проблема в кривом подходе.
Надо делать так:

1. Делаем класс LogItem - со свойствами datetime, id, type, message.
2. Делаем класс Logger - хранит коллекцию of LogItem и предоставляет методы add, remove, save и clear.
3. Profit!
I don't understand. Sorry.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как програмно создать log файл ?

Сообщение Денис » 14.01.2009 (Ср) 15:49

Сатурн:
Код: Выделить всё
Open "C:\windows\logfile.log" For Append As #1
Print #1, Text1.Text & " " & Text2.Text & " " & Text3.Text
Close

и все.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Как програмно создать log файл ?

Сообщение Saturn.65 » 14.01.2009 (Ср) 17:42

Денис писал(а):Сатурн:
Код: Выделить всё
Open "C:\windows\logfile.log" For Append As #1
Print #1, Text1.Text & " " & Text2.Text & " " & Text3.Text
Close

и все.

Это то понятно. Но мне нужно именно по строчкам, чтоб было наглядно видно. Одна строчка одно, вторая другое..
Т.е.
Код: Выделить всё
Print #4, (Text1.Text); "......."; (Text12.Text)
Print #5, (Text2.Text); "......"; (Text22.Text)

Выглядит в логфайле так:
Код: Выделить всё
Количество....0 шт.
Сумма...........0.00 руб.

Просто в отчете сразу наглядно видно.
Спасибо всем за информацию.
Главное, ребята, сердцем не стареть...

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Как програмно создать log файл ?

Сообщение Saturn.65 » 14.01.2009 (Ср) 17:48

Хакер писал(а):Вывести — как обычно, одним вызовом Print. В чём проблема-то?

Я Денису написал, просто мне нужно кучу строчек выводить друг под другом вот и думал, что может "C:\windows\logfile.log" For Append As #1 как-нибудь один раз писать можно. Теперь понял, что нельзя. Ничего страшного, просто код больше будет.
Главное, ребята, сердцем не стареть...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Re: Как програмно создать log файл ?

Сообщение RayShade » 14.01.2009 (Ср) 17:48

Код: Выделить всё
    Open "C:\windows\logfile.log" For Append As #1
    Print #1, Text1.Text & vbcrlf & Text2.Text & vbcrlf & Text3.Text
    Close
I don't understand. Sorry.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Как програмно создать log файл ?

Сообщение Saturn.65 » 14.01.2009 (Ср) 18:32

RayShade писал(а):
Код: Выделить всё
   
    Print #1, Text1.Text & vbcrlf & Text2.Text & vbcrlf & Text3.Text

Вот спасибо! То, что нужно! :)
Немного переделал под свое.
Код: Выделить всё
Print #1, (Text1.Text); "....."; (Text2.Text) & vbCrLf & (Text3.Text); "....."; (Text4.Text)

Получилось:
Количество....0 шт.
Цена..........0.00 руб.
Главное, ребята, сердцем не стареть...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 2

    TopList