asp / VB.net中的FileUpload控件无法访问该文件,因为它正由另一个进程使用

时间:2013-06-22 06:54:50

标签: asp.net vb.net file-upload

错误讯息:

该进程无法访问文件'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

任何想法都会受到赞赏。

3 个答案:

答案 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)