无法将文件移动到其他文件夹中

mik*_*utu 0 vb.net

我试图将少量XML文件的内容插入到Oracle数据库中,然后将文件移动到存档文件夹中,但在移动步骤中失败并显示错误:

该进程无法访问该文件,因为该文件正由另一个进程使用.

这是代码:

conn.Open()

For Each oFile As String In Directory.GetFiles("D:\files")

    Dim cmd As New OracleCommand
    cmd.Connection = conn

    filename = New FileInfo(oFile).Name

            ' integrarea de delivery notes
            XML_File = XmlReader.Create(oFile, New XmlReaderSettings())
            DataSet.ReadXml(XML_File)

            cmd.CommandText = "pkg_erp.insert_delnote"
            cmd.CommandType = CommandType.StoredProcedure

            cmd.Parameters.Add("p_delnote_id", OracleDbType.Int64).Direction = ParameterDirection.Input
            cmd.Parameters.Add("p_order_id", OracleDbType.Int64).Direction = ParameterDirection.Input
            cmd.Parameters.Add("p_product_id", OracleDbType.Int64).Direction = ParameterDirection.Input
            cmd.Parameters.Add("p_quantity", OracleDbType.Int64).Direction = ParameterDirection.Input
            cmd.Parameters.Add("p_confirm", OracleDbType.Int16).Direction = ParameterDirection.Output

            For i As Integer = 0 To DataSet.Tables(0).Rows.Count - 1

                cmd.Parameters("p_delnote_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(0))
                cmd.Parameters("p_order_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(1))
                cmd.Parameters("p_product_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(2))
                cmd.Parameters("p_quantity").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(3))

                temp = cmd.ExecuteNonQuery()

                result = cmd.Parameters("p_confirm").Value.ToString()

                If result = "0" Then
                    file_waived = file_waived & New FileInfo(oFile).Name & Environment.NewLine
                Else
                    file_list = file_list & New FileInfo(oFile).Name & Environment.NewLine
                End If

            Next

            cmd.Parameters.Remove(cmd.Parameters.Add("p_delnote_id", OracleDbType.Int64))
            cmd.Parameters.Remove(cmd.Parameters.Add("p_order_id", OracleDbType.Int64))
            cmd.Parameters.Remove(cmd.Parameters.Add("p_product_id", OracleDbType.Int64))
            cmd.Parameters.Remove(cmd.Parameters.Add("p_quantity", OracleDbType.Int64))
            cmd.Parameters.Remove(cmd.Parameters.Add("p_confirm", OracleDbType.Int16))

            File.Move(oFile, "D:\archive_path_FullText\" & filename)


Next

conn.Close()
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我如何使用"File.Move()"以避免上述错误消息,好吗?

谢谢,

Ste*_*eve 5

将这些行括在using语句中

' integrarea de delivery notes
Using XML_File = XmlReader.Create(oFile, New XmlReaderSettings())
    DataSet.ReadXml(XML_File)
End Using
Run Code Online (Sandbox Code Playgroud)

这将确保XmlReader在文件上创建的锁在ReadXml方法完成后立即关闭并处理,从而释放要在不同位置移动的文件

请参阅MSDN 使用语句

当您处理文件和连接,命令,读取器等一次性对象时,using语句非常重要.从您的代码中,您似乎还需要了解如何修复这些对象的用法

您还可以在文件中移动命令的创建和循环外的所有参数,因此您不必手动删除它们并为下一个文件重新创建它们.最后,不要构建自己的路径字符串,而是使用System.IO命名空间中提供的Path.Combine方法.