Как вернуть поток из метода, зная, что он должен быть удален?C#

Место общения программистов C#
Ответить
Anonymous
 Как вернуть поток из метода, зная, что он должен быть удален?

Сообщение Anonymous »

У меня есть метод, который принимает FileStream в качестве входных данных. Этот метод выполняется внутри цикла for.

Код: Выделить всё

private void UploadFile(FileStream fileStream)
{
var stream = GetFileStream();
// do things with stream
}
У меня есть другой метод, который создает и возвращает FileStream:

Код: Выделить всё

private FileStream GetFileStream()
{
using(FileStream fileStream = File.Open(myFile, FileMode.Open))
{
//Do something
return fileStream;
}
}
Теперь первый метод выдает исключение ObjectDisposeException, когда я пытаюсь получить доступ к возвращенному FileStream, возможно, потому, что он уже закрыт, поскольку я использую using чтобы правильно разместить поток.
Если я не использую using, а вместо этого использую его следующим образом, то FileStream остается открытым и следующая итерация цикл (работающий с тем же файлом) выдает исключение, сообщающее, что файл уже используется:

Код: Выделить всё

private FileStream GetFileStream()
{
FileStream fileStream = File.Open(myFile, FileMode.Open);
//Do something
return fileStream;
}
Если я использую блок try-finally, в котором закрываю поток в конце, он также выдает исключение ObjectDisposeException.
Как я могу эффективно вернуть FileStream и закрыть его?

Подробнее здесь: https://stackoverflow.com/questions/320 ... e-disposed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»