处理FileInfo()

时间:2015-05-05 13:32:35

标签: vb.net system.io.fileinfo system.io.file

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

我正在通过diar1循环,如下所示

 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 个答案:

答案 0 :(得分:5)

创建FileInfo对象无法打开或锁定文件,因此无需关闭或解锁。 FileInfo没有实现IDisposable,所以没有什么可以处理的。你不需要做任何特殊的事情,在没有引用它们之后的某个时候对象将被垃圾收集。

答案 1 :(得分:3)

在GET_FileName中,FileStream是打开的,既不是Closed也不是Disposed。最简单的解决方案是使用Using块包装FileStream用法。您可以在创建FileStream时启动块,然后在xmldoc.Load(fs)之后立即结束它,因为之后您不再需要它。这对于实现IDisposable的任何事情都很好。