0

错误信息:

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

任何想法,将不胜感激。

4

3 回答 3

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)
于 2013-06-23T01:42:07.937 回答
0

您可能不会在您的代码中发布该文件以供访问。您应该使用关键字“使用”。

阅读这篇文章: 该进程无法访问该文件,因为它正在被另一个进程使用 - 使用静态类

和这个:

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

使用文件的下一个过程...

于 2013-06-23T01:31:40.567 回答
0

使用 FileShare.Read 读取文件,即使它是由另一个进程独占打开的。

于 2013-06-22T07:13:13.050 回答