Страница: 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