我有一个方法,将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.
如何有效地返回文件流并关闭它?