Страница: 1 | 2 |
Вопрос: Подскажите новичку
Добавлено: 14.09.11 09:20
Автор вопроса: час
Я написал простую функцию.
---------------------------------------------------
' Создаем новый текстовой файл с именем NAME_FILE
Try
File.Create(NAME_FILE)
FUN_CREATE_FILE = True
Catch ex As Exception
MsgBox(ex.Message)
FUN_IN_TXT(Application.StartupPath & "\ERR_ERRORS.log", Now.ToString & " " & ex.ToString & vbNewLine, True)
FUN_CREATE_FILE = False
End Try
End Function
-------------------------------------------------------
Она работает нормально, но при анализе кода выдаётся
Предупреждение 1 CA2000 : Microsoft.Reliability : В методе 'MOD_FILE.FUN_CREATE_FILE(String)' вызовите System.IDisposable.Dispose для объекта 'File.Create(NAME_FILE)' перед тем, как все ссылки на него будут вне области видимости. C:\1_Текущее\1_2010\PROJECTS\RESTORAN\RESTORAN\MOD_FILE.vb 93 RESTORAN
Что сделано не правильно
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 14.09.11 12:55
File.Create() возвращает FileStream, который остается активным. После выхода из функции на него теряется ссылка, он остается висеть, пока его не найдет сборщик мусора, не поставит в очередь на финализацию, где и будет вызван метод Dispose. Все это произойде непредсказуемо. Анализатор говорит тебе о том что такая ситуация не имеет ничего общего с "надежностью" и предлагает вызвать метод Dispose вручную.
Номер ответа: 2
Автор ответа:
Coloss
ICQ: 479007356
Вопросов: 15
Ответов: 37
Профиль | | #2
Добавлено: 15.09.11 10:55
необходимо закрыть поток.
Номер ответа: 3
Автор ответа:
час1
Вопросов: 5
Ответов: 35
Профиль | | #3
Добавлено: 15.09.11 12:51
Понятно, Спасибо.
А кодом - это как выглядеть будет?
Номер ответа: 4
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #4
Добавлено: 15.09.11 15:44
думай. Тебе все разжевали и положили
Номер ответа: 5
Автор ответа:
час1
Вопросов: 5
Ответов: 35
Профиль | | #5
Добавлено: 15.09.11 16:39
Спасибо!
Я над этим уже третий месяц думаю...
Потому и попросил пояснений к ситуации.
Номер ответа: 6
Автор ответа:
час1
Вопросов: 5
Ответов: 35
Профиль | | #6
Добавлено: 15.09.11 16:41
нету там File.Stream
Номер ответа: 7
Автор ответа:
час1
Вопросов: 5
Ответов: 35
Профиль | | #7
Добавлено: 15.09.11 16:43
и у FileStream нет таких свойств....
Номер ответа: 8
Автор ответа:
час1
Вопросов: 5
Ответов: 35
Профиль | | #8
Добавлено: 15.09.11 17:04
А интернет пестрит вот таким примером.
Нет очистки....
Номер ответа: 9
Автор ответа:
час1
Вопросов: 5
Ответов: 35
Профиль | | #9
Добавлено: 15.09.11 20:39
Видимо вот так нужно....
Номер ответа: 10
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #10
Добавлено: 15.09.11 23:26
хм.. а какой смысл создавать пустой файл?
Номер ответа: 11
Автор ответа:
час1
Вопросов: 5
Ответов: 35
Профиль | | #11
Добавлено: 16.09.11 08:37
А Вы, что предлагаете?
Номер ответа: 12
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #12
Добавлено: 16.09.11 14:50
Using <var> As <:IDisposable>
End Using
Номер ответа: 13
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #13
Добавлено: 16.09.11 16:19
System.IO.File.WriteAllBytes(path, New Byte(0){})
Номер ответа: 14
Автор ответа:
час1
Вопросов: 5
Ответов: 35
Профиль | | #14
Добавлено: 16.09.11 16:35
Наверное, действительно - не стоит создавать пустой файл.
Если создаём файл, сразу в него данные пишем.
Эта функция - не нужная.
Номер ответа: 15
Автор ответа:
Coloss
ICQ: 479007356
Вопросов: 15
Ответов: 37
Профиль | | #15
Добавлено: 18.09.11 21:33