Vb.net 无法将文件移动到其他文件夹中
我试图将少数XML文件的内容插入Oracle数据库,然后将文件移动到存档文件夹中,但移动步骤失败,出现错误: 进程无法访问该文件,因为其他进程正在使用该文件 代码如下:Vb.net 无法将文件移动到其他文件夹中,vb.net,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(oFil
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()
有人能告诉我如何使用“File.Move()”以避免出现上述错误消息吗
谢谢,将这些行括在using语句中
' integrarea de delivery notes
Using XML_File = XmlReader.Create(oFile, New XmlReaderSettings())
DataSet.ReadXml(XML_File)
End Using
这将确保XmlReader在文件上创建的锁在ReadXml方法完成后立即关闭并释放,从而将文件释放到其他位置
见MSDN
在处理文件和连接、命令、读卡器等一次性对象时,using语句非常重要。从您的代码来看,您似乎还需要了解如何修复这些对象的使用
此外,您还可以将命令和所有参数的创建移动到文件的循环之外,这样就不必手动删除它们并为下一个文件重新生成它们。最后,不要自行构建路径字符串,而是使用提供的路径。从System.IO命名空间中组合方法。将这些行括在using语句中
' integrarea de delivery notes
Using XML_File = XmlReader.Create(oFile, New XmlReaderSettings())
DataSet.ReadXml(XML_File)
End Using
这将确保XmlReader在文件上创建的锁在ReadXml方法完成后立即关闭并释放,从而将文件释放到其他位置
见MSDN
在处理文件和连接、命令、读卡器等一次性对象时,using语句非常重要。从您的代码来看,您似乎还需要了解如何修复这些对象的使用
此外,您还可以将命令和所有参数的创建移动到文件的循环之外,这样就不必手动删除它们并为下一个文件重新生成它们。最后,不要自行构建路径字符串,而是使用System.IO命名空间中提供的path.Combine方法。D:\files文件夹可能包含多种文件类型。除送货单外,它还可以包含发票或acknw。为此,在找到文件类型后,我在循环中生成参数。当我使用时:
usingxml_file=XmlReader.Create(oFile,New XmlReaderSettings())DataSet.ReadXml(XML_file)结束时使用
它给我“Expression expected”当我使用使用XML\u文件作为XmlReader=XmlReader.Create(oFile,New XmlReaderSettings())数据集。ReadXml(XML\u文件)结束使用时,它使我感到“变量'XML\u File'将变量隐藏在封闭块中。”我做错了什么?您应该删除XML\u文件的声明。(将Xml_文件作为Xml_读取器设置为Dim Xml_文件“D:\files”文件夹可能包含多种文件类型。除了交货通知外,它还可以包含发票或acknw。为此,我在找到文件类型后在循环中生成参数。当我使用时:using Xml_File=XmlReader.Create(oFile,New XmlReaderSettings())DataSet.ReadXml(XML_文件)End Using
当我使用使用XML_文件作为XmlReader=XmlReader.Create(oFile,New XmlReaderSettings())DataSet.ReadXml(XML_文件)End Using
时,它为我提供了“预期的表达式”。变量“XML_文件”将变量隐藏在封闭块中我做错了什么?您应该删除XML_文件的声明。(将XML_文件作为XML_读取器进行Dim)