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)
答案 0 :(得分:5)
创建FileInfo
对象无法打开或锁定文件,因此无需关闭或解锁。 FileInfo没有实现IDisposable
,所以没有什么可以处理的。你不需要做任何特殊的事情,在没有引用它们之后的某个时候对象将被垃圾收集。
答案 1 :(得分:3)
在GET_FileName中,FileStream是打开的,既不是Closed也不是Disposed。最简单的解决方案是使用Using块包装FileStream用法。您可以在创建FileStream时启动块,然后在xmldoc.Load(fs)之后立即结束它,因为之后您不再需要它。这对于实现IDisposable的任何事情都很好。