Gewusst wie: zurückgeben eines Streams aus einer Methode, zu wissen, sollte es entsorgt werden?

Habe ich eine Methode, die FileStream-als input. Diese Methode wird innerhalb einer for-Schleife.

private void UploadFile(FileStream fileStream)
{
    var stream = GetFileStream();
    //do things with stream
}

Habe ich eine andere Methode, die erstellt und gibt den FileStream:

private FileStream GetFileStream()
{
    using(FileStream fileStream = File.Open(myFile, FileMode.Open))
    {
        //Do something
        return fileStream;
    }
}

Nun die erste Methode wirft eine ObjectDisposedException wenn ich versuche, Zugriff auf die zurückgegebenen FileStream, wahrscheinlich, weil Sie bereits geschlossen, da bin ich mit "using" ordnungsgemäß zu entsorgen stream.

Wenn ich nicht verwenden, "mit", und verwenden Sie stattdessen wie folgt, dann die FileStream geöffnet bleibt und für die nächste iteration der Schleife (Betriebssystem auf der gleichen Datei) wirft eine Ausnahme, sagen die Datei ist schon in Verwendung:

private FileStream GetFileStream()
{
    FileStream fileStream = File.Open(myFile, FileMode.Open);
    //Do something
    return fileStream;
}

Wenn ich einen try-finally-block, wo ich den stream schließen, in der finally es dann auch wirft die ObjectDisposedException.

Wie effektiv die Rückkehr stream-Datei und schließen Sie es?

  • Sie kann es nicht schließen, auch nicht deine Aufgabe. Verwenden Sie einen guten Namen. "Get" ist nicht genug, um zu helfen dem Programmierer herauszufinden, dass er braucht, um über den stream, verwenden Sie "Create" statt.
InformationsquelleAutor Frank Martin | 2015-08-17
Schreibe einen Kommentar