2010-05-28 3 views
2

Я создаю файл Excel на веб-сервере, используя OleDb для подключения физического (а также физического, как он может быть) файла и добавления записей. Затем я возвращаю FilePathResult пользователю через MVC и хотел бы удалить физический файл впоследствии из-за проблем с защитой данных над прилагаемыми записями.Как автоматически удалить файл Excel после его создания на сервере и вернуть его пользователю?

Я попытался с помощью File.Delete в статье в Наконец, но я получаю ошибку Файл не найден, который должен означать, что файл ушел, когда MVC пытается отправить файл пользователю.

Я думал о создании Файла как 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

+0

Не могли бы вы опубликовать код для этого? –

+0

Я не знал, что OleDb не 64-битный - мне нужно будет это сделать, но это не проблема на данный момент, приветствует Cine, также я добавил функцию, где, как я думаю, решение будет идти, но не уверен это действительно помогает. –

ответ

1

Несколько Hacky, но вы могли бы сделать, как показано ниже:

  1. чтения файла в массив байтов в памяти с помощью File.ReadAllBytes(),
  2. удалить файл,
  3. сформировать поток памяти вокруг байтового массива
  4. получить MVC для возврата данных через поток с помощью FileStreamResult.

Очевидно, что если файлы большие, то вы можете получить давление в памяти.

+0

Привет Нейл, это имеет смысл - создайте реальный файл с помощью ADO - THEN прочитайте его в потоке памяти, а затем удалите его - так просто :) Приветствия за это –

Смежные вопросы