Tôi có một phương thức lấy FileStream làm đầu vào. Phương thức này đang chạy bên trong vòng lặp for.Làm thế nào để trả về một luồng từ một phương pháp, biết nó nên được xử lý?
private void UploadFile(FileStream fileStream)
{
var stream = GetFileStream();
// do things with stream
}
Tôi có một phương pháp mà tạo ra và trả về FileStream:
private FileStream GetFileStream()
{
using(FileStream fileStream = File.Open(myFile, FileMode.Open))
{
//Do something
return fileStream;
}
}
Bây giờ phương pháp đầu tiên ném một ObjectDisposedException
khi tôi cố gắng để truy cập FileStream trở lại, có lẽ vì nó đã đóng cửa kể từ tôi sử dụng "using
" để xử lý đúng luồng.
Nếu tôi không sử dụng "sử dụng" và thay vào đó sử dụng nó như sau, thì FileStream vẫn mở và vòng lặp tiếp theo của vòng lặp (hoạt động trên cùng một tệp) ném một ngoại lệ cho biết tệp đã được sử dụng:
private FileStream GetFileStream()
{
FileStream fileStream = File.Open(myFile, FileMode.Open);
//Do something
return fileStream;
}
Nếu tôi sử dụng một thử-cuối cùng khối, nơi tôi đóng dòng trong finally
thì nó cũng ném ObjectDisposedException
.
Làm cách nào để trả lại luồng tệp hiệu quả và đóng luồng?
Bạn không thể đóng nó, không phải công việc của bạn. Sử dụng tên tốt. "Nhận" là không đủ để giúp các lập trình viên tìm ra rằng ông cần phải xử lý các dòng, sử dụng "Tạo" thay thế. –