错误讯息:
该进程无法访问文件'C:\ SampleProjectName \ mytestcsv.csv',因为它正由另一个进程使用。
我正在尝试使用fileupload(文件上传)控件在asp / VB.net中读取大量文件(CSV,XML,HTML)。
我正在使用Server.MapPath保存文件,因此我可以在另一个过程中处理该文件。这很奇怪,但有时我可以一遍又一遍地浏览和上传同一个文件而没有任何问题,但有时会立即失败。
我发现我最终可以杀死WebDev.WebServer40.exe它会释放任何锁定。这很烦人,但我的调试很好......但是对于最终用户来说是不可接受的。
我的文件上传代码:
If fuImport.HasFile Then
If (System.IO.File.Exists(Server.MapPath("myhtml.html"))) Then
System.IO.File.Delete(Server.MapPath("myhtml.html"))
End If
Dim dtFromHTML As New Data.DataTable
Dim dtFromSQL As New Data.DataTable
Try
fuImport.SaveAs(Server.MapPath("mytestcsv.csv"))
'Process data here
ProcessCSVData(Server.MapPath("mytestcsv.csv"))
Catch ex As Exception
Response.Write("error: " & ex.Message)
Finally
fuImport.PostedFile.InputStream.Flush()
fuImport.PostedFile.InputStream.Close()
fuImport.FileContent.Dispose()
End Try
'Other things happen here
Else
Response.Write("no file...")
End If
任何想法都会受到赞赏。
答案 0 :(得分:0)
使用FileShare.Read读取文件,即使它是由另一个进程专门打开的。
答案 1 :(得分:0)
您可能无法在代码中发布文件以进行访问。您应该使用关键字“使用”。
阅读这篇文章: The process cannot access the file because it is being used by another process - using static class
和此:
http://msdn.microsoft.com/en-us/library/htd05whh.aspx
我不是VB.NET程序员,但尝试了以下几点:
Using {fuImport.SaveAs(Server.MapPath("mytestcsv.csv")) }
ProcessCSVData(Server.MapPath("mytestcsv.csv"))
End Using
使用文件的下一个程序......
答案 2 :(得分:0)
在访问文件之前尝试关闭输入流:
更新使用临时文件名
Dim sTempName = Path.GetRandomFileName
fuImport.SaveAs(Server.MapPath(sTempName))
'close before accessing saved file
fuImport.PostedFile.InputStream.Close()
'Process data here
ProcessCSVData(Server.MapPath(sTempName)