相关疑难解决方法(0)

如何从方法中返回Stream,知道它应该被处理?

我有一个方法,将FileStream作为输入.此方法在for循环内运行.

private void UploadFile(FileStream fileStream)
{
    var stream = GetFileStream();
    // do things with stream
}
Run Code Online (Sandbox Code Playgroud)

我有另一种方法,它创建并返回FileStream:

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

现在第一个方法抛出一个ObjectDisposedException当我尝试访问返回的FileStream时,可能是因为它已经关闭,因为我正在使用" using"来正确处理流.

如果我不使用"using"而是按如下方式使用它,那么FileStream将保持打开状态,循环的下一次迭代(在同一文件上运行)会抛出异常,告知文件已在使用中:

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

如果我使用try-finally块,我在那里关闭流,finally那么它也会抛出ObjectDisposedException.

如何有效地返回文件流并关闭它?

c# idisposable using stream

22
推荐指数
3
解决办法
1万
查看次数

标签 统计

c# ×1

idisposable ×1

stream ×1

using ×1