Tôi đã có, có lẽ là câu hỏi tầm thường nhưng tôi không thể hiểu nó. Tôi đã viết mã đơn giản:VS8 không thể xử lý file.close(); file.open() ;, tại sao?
fstream file;
file.open("data", ios::in);
if(!file.good()){
file.close();
file.open("data", ios::out);
if(!file.good()) cout<<"not good"<<endl;
file<<"test"<<endl;
file.close();
}
trong dự án VS8 C++ Express mới. Khi tôi chạy nó và "dữ liệu" không tồn tại, nó tạo ra tập tin, nhưng cũng trả về "không tốt" (thứ hai) để đầu ra không được ghi trong tập tin. Và bây giờ đến điều buồn cười. Nếu tôi biên dịch cùng một mã trong VS10 C++ Express và Code :: Blocks 12, nó hoạt động tốt.
Tại sao lại như vậy?
@edit Bạn tôi đã kiểm tra nó trên PC của mình với VS8 C++ Expres quá. Làm việc tương tự cho anh ta.
@ edit2 Tương tự như nhận xét của tôi với "giải pháp":
Buộc để xóa failbit với .clear(); phương pháp dường như hoạt động. Nó đau khổ khi bạn tìm hiểu trong IDE mới hơn và sau đó phải chuyển sang cũ hơn: /. Tho, nó mang đến bài học hay. Cảm ơn các bạn.
Các trình biên dịch khác nhau đôi khi có các triển khai khác nhau của tiêu chuẩn. Đặc biệt là các trình biên dịch Microsoft ... – Appleshell
Bạn có thể sử dụng 'is_open' thay cho' good'. –
Có lẽ failbit không bị xóa sau lần thất bại đầu tiên. Nó trông giống như "mở" bây giờ xóa các failbit về thành công trong C++ 11 và có lẽ thay đổi này đã được thực hiện trong VS2010 với dự đoán của một số các tính năng tiêu chuẩn mới (bấm vào các tab cho thấy sự khác biệt giữa C + + 03 và C + +11 http://www.cplusplus.com/reference/fstream/fstream/open/) – statueuphemism