2010-05-28 60 views
2

我正在Web服务器上创建一个Excel文件,使用OleDb连接物理文件(以及物理文件)和追加记录。然后,我通过MVC向用户返回一个FilePathResult,并且由于对所附记录的数据保护问题而想要删除物理文件。如何在服务器上创建Excel文件并将其返回给用户后自动删除Excel文件?

我已经在最后条款使用File.Delete尝试,但我得到一个文件未找到错误这必然意味着该文件时MVC正试图将文件发送到用户已经一去不复返了。

我曾考虑将File创建为MemoryStream,但我认为OleDb需要一个物理文件来连接,所以这不是一个选项。

有关如何在一次操作中返回文件后删除文件的任何建议?

编辑

按照要求这就是我从工作,虽然我不知道它是如何帮助:)

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 
+0

您应该知道OleDb在64位机器上不受支持,因此您应该为未来验证代码找到另一个解决方案。 – Cine 2010-05-28 09:35:46

+0

你能为此发布一些代码吗? – 2010-05-28 09:36:07

+0

我不知道OleDb不是64位 - 我必须记下这一点,但目前这不是问题,欢呼Cine,我也添加了功能,我认为解决方案会去但不确定它确实有帮助。 – 2010-05-28 10:16:37

回答

1

有点哈克,但你可以如下操作:

  1. 文件读入到存储器中的字节数组使用File.ReadAllBytes(),
  2. 删除该文件,
  3. 在字节数组周围形成一个内存流
  4. 获取MVC以使用FileStreamResult通过流返回数据。

显然,如果文件很大,那么您可能会得到内存压力。

+0

嗨尼尔,这非常有道理 - 使用ADO创建真实文件 - 然后将它读入内存流 - 然后删除它 - 如此简单:)为此欢呼 – 2010-06-01 07:35:12

相关问题