2

OleDb を使用して物理的な (可能な限り物理的な) ファイルに接続し、レコードを追加して、Web サーバー上に Excel ファイルを作成しています。次に、MVC を介してFilePathResultをユーザーに返しますが、追加されたレコードに対するデータ保護の問題により、後で物理ファイルを削除したいと考えています。

Final 句でFile.Deleteを使用しようとしましたが、MVC がユーザーにファイルを送信しようとしたとき、ファイルがなくなったことを意味する File Not Found エラーが発生します。

File を MemoryStream として作成することを考えましたが、OleDb には接続する物理ファイルが必要だと思うので、これはオプションではありません。

1回の操作でファイルを返した後にファイルを削除する方法について何か提案はありますか?

編集

要求に応じて、これが私が取り組んでいるものですが、それがどのように役立つかはわかりません:)

    Public Function ExportAllOutputs() As FilePathResult

        ' Create Export File Name
        Dim ExportFilename As String = Replace(Me.Name, " ", "_") & "_Outputs.xls"

        Try

            ' Create Export File
            CreateExportFile(ExportFilename)

            ' Populate Export File
            For Each OutputType As OutputTypeEnum In [Enum].GetValues(GetType(OutputTypeEnum))
                ExportHelper.AppendOutputs(ExportFilepath & ExportFilename, Me.GetOutputs(OutputType), Me.ProgrammeID)
            Next

            ' Return Export File
            Return ReturnExportFile(ExportFilename)

        Catch ex As Exception
            Throw
        Finally
            'If IO.File.Exists(ExportFilepath & ExportFilename) Then IO.File.Delete(ExportFilepath & ExportFilename)
        End Try

    End Function
4

1 に答える 1

1

ややハックですが、次のようにすることができます。

  1. File.ReadAllBytes() を使用してメモリ内のバイト配列にファイルを読み取り、
  2. ファイルを削除し、
  3. バイト配列の周りにメモリ ストリームを形成する
  4. FileStreamResult を使用して MVC がストリーム経由でデータを返すようにします。

明らかに、ファイルが大きい場合、メモリ不足になる可能性があります。

于 2010-05-28T10:29:39.687 に答える