2010-05-28 101 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

相關問題