Não é possível excluir arquivos temporários após o retorno do FileStream
Eu tenho uma função em um aplicativo C # MVC que cria um diretório temporário e um arquivo temporário, em seguida, abre o arquivo usando FileStream, retorna o FileStream para uma função de chamada e, em seguida, precisa excluir os arquivos temporários. No entanto, não sei como excluir o diretório e o arquivo temporário porque ele sempre comete erros dizendo que "o processo não pode acessar o arquivo porque está sendo usado por outro processo". Isso é o que eu tentei, mas o FileStream ainda está usando o arquivo temporário no bloco finally. Como posso retornar o FileStream e excluir os arquivos temporários?
public FileStream DownloadProjectsZipFileStream()
{
Directory.CreateDirectory(_tempDirectory);
// temporary file is created here
_zipFile.Save(_tempDirectory + _tempFileName);
try
{
FileStream stream = new FileStream(_tempDirectory + _tempFileName, FileMode.Open);
return stream;
}
finally
{
File.Delete(_tempDirectory + _tempFileName);
Directory.Delete(_tempDirectory);
}
}
A função para a qual o FileStream é retornado se parece com isso:
public ActionResult DownloadProjects ()
{
ProjectDownloader projectDownloader = new ProjectDownloader();
FileStream stream = projectDownloader.DownloadProjectsZipFileStream();
return File(stream, "application/zip", "Projects.zip");
}
Atualizar: Esqueci de mencionar que o arquivo zip tem 380 MB. Eu recebo um sistema de exceção de memória ao usar um MemoryStream.