Ich habe eine Methode, die FileStream als Eingabe verwendet. Diese Methode wird innerhalb einer for-Schleife ausgeführt.Wie kann man einen Stream von einer Methode zurückgeben, weil er weiß, dass er entsorgt werden sollte?
private void UploadFile(FileStream fileStream)
{
var stream = GetFileStream();
// do things with stream
}
Ich habe eine andere Methode, die erstellt und gibt das Filestream:
private FileStream GetFileStream()
{
using(FileStream fileStream = File.Open(myFile, FileMode.Open))
{
//Do something
return fileStream;
}
}
Nun ist die erste Methode löst ein ObjectDisposedException
wenn ich versuche, das zurückgegebene Filestream zuzugreifen, wahrscheinlich, weil es schon seit ich geschlossen ist bin Verwenden Sie "using
", um den Stream ordnungsgemäß zu entsorgen.
Wenn ich "using" nicht verwende und stattdessen wie folgt verwende, bleibt der FileStream offen und die nächste Iteration der Schleife (die auf der gleichen Datei läuft) löst eine Ausnahme aus, die besagt, dass die Datei bereits verwendet wird:
private FileStream GetFileStream()
{
FileStream fileStream = File.Open(myFile, FileMode.Open);
//Do something
return fileStream;
}
Wenn ich einen try-finally-Block verwenden, wo ich den Strom in der finally
schließen sie dann auch die ObjectDisposedException
wirft.
Wie effektiv Dateistrom zurück und schließen Sie es?
Sie können es nicht schließen, nicht Ihre Arbeit. Benutze gute Namen. "Get" ist nicht genug, um dem Programmierer zu helfen, herauszufinden, dass er den Stream entsorgen muss, stattdessen "Create" verwenden. –