Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Ведём лог файл... Добавлено: 05.01.09 12:14  

Автор вопроса:  werber | Web-сайт: www.werbersoft.ru
Организовал функцию ведения лог файла. Скажите ка, всё ли в ней нормально? Может надо что-то изменить или улучшить?

Public Function WriteLog(StringLog As String)
Dim MyFile
MyFile = FreeFile
Open App.Path + "\Log.txt" For Append As #MyFile
Print #MyFile, StringLog
Close
End Function

Ответить

  Ответы Всего ответов: 42  

Номер ответа: 1
Автор ответа:
 @lex



Вопросов: 14
Ответов: 262
 Профиль | | #1 Добавлено: 05.01.09 13:18
"\Log.txt"

Если программа будет лежать в корне диска то по-моему работать не будет, т.к. выходит "C:\\Log.txt"
Приделай проверку) Хотя бы самым примитивным способом)
  1. If Len(App.Path) > 3 Then
  2. Open App.Path + "\Log.txt" For Append As #MyFile
  3. Else
  4. Open App.Path + "Log.txt" For Append As #MyFile
  5. End If

Ответить

Номер ответа: 2
Автор ответа:
 @lex



Вопросов: 14
Ответов: 262
 Профиль | | #2 Добавлено: 05.01.09 13:21
Ну и время, раз это лог файл)
  1. Print #MyFile, "[" & Time & "] " & StringLog

Ответить

Номер ответа: 3
Автор ответа:
 werber



Вопросов: 71
Ответов: 112
 Web-сайт: www.werbersoft.ru
 Профиль | | #3
Добавлено: 05.01.09 13:40
А какая разница? Вроде Windows вполне корректно понимает "\\" ! Мне кажется проверка лишняя...

Ответить

Номер ответа: 4
Автор ответа:
 @lex



Вопросов: 14
Ответов: 262
 Профиль | | #4 Добавлено: 05.01.09 13:58
werber пишет:
Windows вполне корректно понимает "\\"

Хм... Реально)

Ответить

Номер ответа: 5
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #5 Добавлено: 05.01.09 14:16
Функции полагается что-то возвращать.
Ошибку при записи в файл или, например, счетчик обращений к ней.

Ответить

Номер ответа: 6
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #6 Добавлено: 05.01.09 22:02
  1. Close

эта строка, по-моему, должна закрыть ВСЕ открытые с помощью Open файлы... Надо явно указывать номер.

Ответить

Номер ответа: 7
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #7
Добавлено: 05.01.09 22:23
ну а если функции возвращать ничего не нужно, то в vb используют Public Sub
FreeFile - возвращает int, значит нужно объявить Dim MyFile As Integer

Ответить

Номер ответа: 8
Автор ответа:
 werber



Вопросов: 71
Ответов: 112
 Web-сайт: www.werbersoft.ru
 Профиль | | #8
Добавлено: 06.01.09 13:20
Получается вот так:

  1. Public Sub WriteLog(StringLog As String)
  2. Dim MyFile As Integer
  3. MyFile = FreeFile
  4. Open App.Path + "\Log.txt" For Append As #MyFile
  5. Print #MyFile, "[" + Str(Time) + "] " & StringLog
  6. Close MyFile
  7. End Sub

Ответить

Номер ответа: 9
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 06.01.09 13:49
ага) а еще можно отступ коду функции табом сделать
Str$, т.к. Str - типа Variant, который использовать по идее нежелательно (но это уже паранойя:-)

Ответить

Номер ответа: 10
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #10
Добавлено: 06.01.09 13:50
werber пишет:
Мне кажется проверка лишняя...

А вот нифига не лишняя =) Некоторые версии msvbvm60 возвращают путь с завершающим бэкслешем, а некоторые - без.

Ответить

Номер ответа: 11
Автор ответа:
 @lex



Вопросов: 14
Ответов: 262
 Профиль | | #11 Добавлено: 06.01.09 15:13
Executioner пишет:
А вот нифига не лишняя

  1. Public Sub WriteLog(StringLog As String)
  2. Dim MyFile As Integer
  3. MyFile = FreeFile
  4. If Right(App.Path, 1) = "\" Then
  5. Open App.Path + "Log.txt" For Append As #MyFile
  6. Else
  7. Open App.Path + "\Log.txt" For Append As #MyFile
  8. End If
  9. Print #MyFile, "[" + Str(Time) + "] " & StringLog
  10. Close #MyFile
  11. End Sub

Ответить

Номер ответа: 12
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #12
Добавлено: 06.01.09 18:43
У меня иначе немного все сделано. Вот что юзаю я:
  1. #Const LOG_CHECK_MAX_SIZE = True               ' добавляем проверку максимального размера лог-файла. условная компиляция.
  2.  
  3. '--------------------------------------------------------------------------------
  4. ' Procedure  :       Log
  5. ' Description:       выводит отладочные данные в файл
  6. '                    ИСПОЛЬЗУЕТСЯ УСЛОВНАЯ КОМПИЛЯЦИЯ!
  7. '                    Помним о константе LOG_CHECK_MAX_SIZE
  8. '                    Имя файла и его максимальный размер задаются в
  9. '                    локальных константах
  10. ' Created by :       Executioner
  11. ' Machine    :       DOMKRATTPC
  12. ' Date-Time  :       12.07.2007-22:12:08
  13. '
  14. ' Parameters :       LogData
  15. '                    AddDateTime
  16. '--------------------------------------------------------------------------------
  17.  
  18. Public Sub Log(ByVal LogData As String, Optional AddDateTime As Boolean = True)
  19.     Const MAX_LOG_SIZE_IN_KB As Long = 100     ' максимальный размер файла лога
  20.     Const LOG_FILE As String = "Log.txt"       ' имя файла лога
  21.     Dim fileNumber As Integer
  22.     Dim fileName As String
  23.     
  24.     fileNumber = FreeFile
  25.     ' мутим имя файла
  26.     fileName = IIf((Right(App.Path, 1) = "\"), App.Path & LOG_FILE, App.Path & "\" & LOG_FILE)
  27.     On Error GoTo Log_ErrHandler
  28.     ' открываем файл лога
  29.     Open fileName For Append As #fileNumber
  30.     #If LOG_CHECK_MAX_SIZE Then
  31.         ' проверка на достижение максимального размера файла лога
  32.         If (LOF(fileNumber) > MAX_LOG_SIZE_IN_KB * 1024) And MAX_LOG_SIZE_IN_KB > 0 Then
  33.             ' максимальный размер достигнут - чистим файл
  34.             Close #fileNumber
  35.             Kill fileName
  36.             Open fileName For Append As #fileNumber
  37.         End If
  38.     #End If
  39.     ' добавляем новые данные и закрываемся
  40.     Print #fileNumber, IIf(AddDateTime, "[" & CStr(Now) & "]" & vbTab & LogData, LogData)
  41.     Close #fileNumber
  42.     Exit Sub
  43.     
  44.     ' обработчик ошибок
  45. Log_ErrHandler:
  46.     MsgBox Err.Description, vbCritical, "Error number " & Err.Number
  47. End Sub
  48.  
  49. Private Sub Form_Load()
  50.     Log "Form loaded!"
  51.     Log "It's very good =)", False
  52. End Sub

Ответить

Номер ответа: 13
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #13
Добавлено: 06.01.09 18:47
Не обращайте внимания на количество строк =) Их много из-за пропусков и комментариев. А если выключить проверку максимального размера файла лога, то ваще мало кода получается. Если код кажется страшным, то уберите комментарии и все между #If/#End If и обработчик ошибок (не советую) =)

Ответить

Номер ответа: 14
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #14
Добавлено: 06.01.09 19:55
Executioner, красивый кот) Только не пойму, зойчем открыть файл, потом проверить размер, закрыть, удалить, открыть снова.
Почему бы не заюзать filelen, если надо удалить файл, а потом уже использовать Open?

Ответить

Номер ответа: 15
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #15
Добавлено: 06.01.09 20:17
Можно заюзать и FileLen, просто код писался давно и тогда я видимо не знал о существовании этой функции =)

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам