Tôi nghĩ rằng các câu trả lời trước đó là gây hiểu nhầm.
fstream
là một đối tượng RAII thích hợp, nó không tự động đóng lại ở phần cuối của phạm vi, và có là hoàn toàn không cần bất cứ điều gì gọi close
bằng tay khi đóng cửa vào cuối phạm vi là đủ.
Cụ thể, đó không phải là "thực hành tốt nhất" và không cần thiết phải xóa đầu ra.
Và trong khi Drakosha là đúng mà gọi close
cung cấp cho bạn khả năng kiểm tra bit không thành công của luồng, không ai làm điều đó, anyway.
Trong một thế giới lý tưởng, người ta chỉ cần gọi stream.exception(ios::failbit)
trước và xử lý ngoại lệ được ném vào một destructor của fstream
. Nhưng tiếc là ngoại lệ trong destructors là một khái niệm bị hỏng trong C++ do đó, đó không phải là một ý tưởng tốt.
Vì vậy, nếu bạn muốn kiểm tra thành công của việc đóng tệp, hãy thực hiện thủ công (nhưng chỉ sau đó).
Nguồn
2011-01-26 08:31:07
có nó trùng lặp. Cảm ơn bạn. Tôi đã không tìm thấy nó. –
Không trùng lặp chính xác. Câu hỏi được tham chiếu dành riêng cho ifstreams và câu hỏi này nói chung về fstreams. –