2015-05-05 6 views
1
Dim FolderName As New IO.DirectoryInfo(FileLocationFolder) 
Dim diar1 As IO.FileInfo() = FolderName.GetFiles("*.xml") 

Я перекручивание через diar1 как следующийDispose FileInfo()

For Each CurrFile In diar1 
Next 

ли это заблокировать все файлы в этом каталоге?

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

Вот остальная часть моего кода:

Public Sub Get_FTP_video(ByVal curr As Integer) 
    Try 

     Dim FolderName As New IO.DirectoryInfo(FileLocationFolder) 
     Dim diar1 As IO.FileInfo() = FolderName.GetFiles("*.xml") 

     Dim CurrFile As IO.FileInfo 
     Dim CurrfileName As String 
     Dim currsize, MinSize As Integer 
     currsize = 0 
     MinSize = 0 

     For Each CurrFile In diar1 
      CurrfileName = CurrFile.Name 

      If CurrFile.CreationTime.Date = Today.Date Then 
       GET_FileName(FileLocationFolder & CurrfileName, currsize) 
       If MinSize = 0 Then 
        MinSize = currsize 
       Else 
        If currsize < MinSize Then 
         splitter = CurrFile.Name.Split(".") 
         If My.Computer.FileSystem.FileExists(FileLocationFolder & splitter(0).ToString & ".mp4") Then 
          MinSize = currsize 
          newVideoName = splitter(0).ToString 
         End If 
        End If 
       End If 
      End If 
     Next 

     System.IO.File.Move(FileLocationFolder & videonamee & ".mp4", MoveFileToFolder & videonamee) 
     sendmessage = True 

     MoveAllFilesToBin() 

    Catch ex As System.Data.SqlClient.SqlException 
    Catch ex As Exception 
    End Try 
End Sub 

'

Public Sub GET_FileName(ByVal directorytracer As String, ByRef fileSize As Integer) 
     Try 
      Dim xmldoc As New XmlDataDocument() 
      Dim mmm As New XmlDataDocument 
      Dim xmlnode As XmlNodeList 
      Dim i As Integer 
      Dim str As String 
      Dim fs As New FileStream(directorytracer, FileMode.Open, FileAccess.Read) 
      xmldoc.Load(fs) 
      Dim ds As New DataSet 
      Dim xmlNodeRdr As XmlNodeReader 
      xmlnode = xmldoc.GetElementsByTagName("item") 

      For i = 0 To xmlnode.Count - 1 
       str = xmlnode(i).ChildNodes.Item(3).InnerXml 
       mmm.InnerXml = str 
       xmlNodeRdr = New XmlNodeReader(mmm) 
       ds.ReadXml(xmlNodeRdr) 
       fileSize = CInt(ds.Tables(0).Rows(0).Item(0).ToString) 
      Next 

     Catch ex As System.Data.SqlClient.SqlException 

     Catch ex As Exception 

     End Try 

    End Sub 

.

Ошибка возникает в этой функции:

Sub MoveAllFilesToBin() 
    Try 
     Dim FolderName As New IO.DirectoryInfo(FileLocationFolder) 
     Dim diar1 As IO.FileInfo() = FolderName.GetFiles() 
     For Each CurrFile In diar1 
      If System.IO.File.Exists(BinFolderFTP & CurrFile.Name) Then 
       System.IO.File.Delete(BinFolderFTP & CurrFile.Name) 
      End If 
      System.IO.File.Move(FileLocationFolder & CurrFile.Name, BinFolderFTP & CurrFile.Name) 
     Next 

     Catch ex As System.Data.SqlClient.SqlException 
     Catch ex As Exception 
    End Try 
End Sub 

.

The process cannot access the file because it is being used by another process. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.__Error.WinIOError() 
    at System.IO.File.Move(String sourceFileName, String destFileName) 

ответ

2

В GET_FileName открывается FileStream и не закрывается и не удаляется. Самое простое решение - обернуть использование FileStream блоком «Использование». Вероятно, вы можете запустить блок при создании FileStream и завершить его сразу после xmldoc.Load (fs), поскольку после этого вам больше не понадобится. Это хорошо для любого, что реализует IDisposable.

5

Создание объекта FileInfo не открывается или заблокировать файл, так что нет ничего, чтобы закрыть или открыть. FileInfo не реализует IDisposable, поэтому распоряжаться им нечего. Вам не нужно ничего делать, объекты будут собирать мусор некоторое время после того, как нет ссылок на них.

+0

Они вызывают у меня проблемы, когда я использую файлы в остальной части кода. Я получаю следующую ошибку: процесс не может получить доступ к файлу, потому что он используется другим процессом. – HelpASisterOut

+1

@HelpASisterOut: не 'FileInfo()' вызывает проблемы, а то, как вы их используете. Но вы не указали код. Возможно, вы открыли поток, не закрывая его. –

+0

Я не верю, что проблема может заключаться в том, что вы создали объекты 'FileInfo'. Файл должен использоваться по другой причине. – Blackwood