Mam funkcję w aplikacji C# MVC, która tworzy katalog tymczasowy i plik tymczasowy, a następnie otwiera plik przy użyciu FileStream, zwraca obiekt FileStream do funkcji wywołującej, a następnie musi usuń pliki tymczasowe. Jednak nie wiem, jak usunąć katalog tymczasowy i plik, ponieważ zawsze błędnie mówi "proces nie może uzyskać dostępu do pliku, ponieważ jest używany przez inny proces." Oto, co próbowałem, ale FileStream nadal używa pliku tymczasowego w bloku finally. Jak mogę zwrócić plik FileStream i usunąć pliki tymczasowe?Nie można usunąć plików tymczasowych po zwróceniu pliku 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);
}
}
Funkcja FileStream jest zwracana wygląda następująco:
public ActionResult DownloadProjects()
{
ProjectDownloader projectDownloader = new ProjectDownloader();
FileStream stream = projectDownloader.DownloadProjectsZipFileStream();
return File(stream, "application/zip", "Projects.zip");
}
Aktualizacja: Zapomniałem wspomnieć plik zip jest 380 MB. Podczas korzystania z obiektu MemoryStream otrzymuję wyjątek dotyczący braku pamięci systemowej.
Opcja 'FileStream' ma otwarty plik, dlaczego nawet oczekiwać, aby móc usunąć plik? To spowodowałoby, że zwrócone 'FileStream' nie nadaje się do użytku. –
Jaki jest typ pliku _zipFile? –
NAPRAWDĘ nie potrzebujesz tego pliku, zamiast tego zapisz w strumieniu pamięci. –