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

ファイルが別のプロセスによって排他的に開かれている場合でも、FileShare.Read を使用してファイルを読み取ります。

于 2013-06-22T07:13:13.050 に答える
0

アクセスのためにコード内でファイルを解放していない可能性があります。「using」というキーワードを使用する必要があります。

この投稿を読む: 別のプロセスで使用されているため、プロセスはファイルにアクセスできません - 静的クラスを使用

この:

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 に答える