Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

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

 

  Вопрос: Подскажите новичку Добавлено: 14.09.11 09:20  

Автор вопроса:  час
Я написал простую функцию.
---------------------------------------------------
   
Function FUN_CREATE_FILE(ByVal NAME_FILE As String) As Boolean
        ' Создаем новый текстовой файл с именем 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
А интернет пестрит вот таким примером.
  1. The following VB.NET source code shows these operations:
  2. Imports System.IO
  3. Public Class Form1
  4. Private Sub Button1_Click (ByVal sender As System.Object, _
  5. ByVal e As System.EventArgs) Handles Button1.Click
  6. If File.Exists("c:\testFile.txt") Then
  7. 'shows message if testFile exist
  8. MsgBox("File 'testFile' Exist ")
  9. Else
  10. 'create the file testFile.txt
  11. File.Create("c:\testFile.txt")
  12. MsgBox("File 'testFile' created ")
  13. End If
  14. End Sub
  15. End Class


Нет очистки....

Ответить

Номер ответа: 9
Автор ответа:
 час1



Вопросов: 5
Ответов: 35
 Профиль | | #9 Добавлено: 15.09.11 20:39
  1.    Function FUN_CREATE_FILE(ByVal NAME_FILE As String) As Boolean
  2.         ' Создаем новый текстовой файл с именем NAME_FILE
  3.         Try
  4.             Dim Files As System.IO.FileStream
  5.             Files = System.IO.File.Create(NAME_FILE)
  6.             Files.Close()
  7.             FUN_CREATE_FILE = True
  8.  
  9.         Catch ex As Exception
  10.             MsgBox(ex.Message)
  11.             FUN_IN_TXT(Application.StartupPath & "\ERR_ERRORS.log", Now.ToString & "  " & ex.ToString & vbNewLine, True)
  12.             FUN_CREATE_FILE = False
  13.         End Try
  14.  
  15.     End Function


Видимо вот так нужно....

Ответить

Номер ответа: 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
  1. ‘ описание переменной которой присвоим полное имя файла
  2.       Dim fulname As String = TextBox1.Text
  3.        ‘если такой файл уже существует
  4.  If File.Exists(fulname) Then
  5.            ‘То выдаем об этом сообщение
  6.  MsgBox("Данный файл уже существует")
  7.         Else ‘иначе
  8. ‘создаем переменную типа FileStream(поток для создания файла)
  9.             Dim fs As FileStream
  10. ‘создаем файл
  11.             fs = File.Create(fulname)
  12. ‘закрываем поток
  13.             fs.Close()
  14.             MsgBox("Файл " + fulname + " создан")
  15.         End If

Ответить

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

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



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