Ho una funzione in un'applicazione C# MVC che crea una directory temporanea e un file temporaneo, quindi apre il file utilizzando FileStream, restituisce FileStream a una funzione di chiamata e quindi deve elimina i file temporanei. Tuttavia, non so come eliminare la directory temporanea e il file perché si sbaglia sempre dicendo "il processo non può accedere al file perché è utilizzato da un altro processo". Questo è quello che ho provato, ma FileStream sta ancora utilizzando il file temporaneo nel blocco finally. Come posso restituire FileStream ed eliminare i file temporanei?Impossibile eliminare i file temporanei dopo il ritorno FileStream
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);
}
}
La funzione del FileStream viene restituito al assomiglia a questo:
public ActionResult DownloadProjects()
{
ProjectDownloader projectDownloader = new ProjectDownloader();
FileStream stream = projectDownloader.DownloadProjectsZipFileStream();
return File(stream, "application/zip", "Projects.zip");
}
Aggiornamento: ho dimenticato di menzionare il file zip è di 380 MB. Ricevo un'eccezione di memoria del sistema quando utilizzo un MemoryStream.
Il 'FileStream' ha il file aperto, perché si aspetta anche di essere in grado di cancellare il file? Ciò renderebbe inutilizzabile il 'FileStream 'restituito. –
Qual è il tipo di _zipFile? –
Non hai davvero bisogno del file, salva invece in un flusso di memoria. –