Tôi đã tự hỏi liệu có cách nào để đặt lại trạng thái eof trong C++ không?Đặt lại trạng thái kết thúc tệp của đối tượng ifstream trong C++
Trả lời
Đối với tệp, bạn chỉ có thể tìm kiếm bất kỳ vị trí nào. Ví dụ, để tua lại để bắt đầu:
std::ifstream infile("hello.txt");
while (infile.read(...)) { /*...*/ } // etc etc
infile.clear(); // clear fail and eof bits
infile.seekg(0, std::ios::beg); // back to the start!
Nếu bạn đã đọc qua Cuối cùng, bạn phải thiết lập lại các cờ báo lỗi với clear()
như @Jerry Coffin gợi ý.
Tôi đã thử điều này và nó chỉ hoạt động nếu 'clear' được gọi là * trước *' seekg'. Xem thêm tại đây: http://cboard.cprogramming.com/cplusplus-programming/134024-so-how-do-i-get-ifstream-start-top-file-again.html – Frank
@Frank: Cảm ơn, đã chỉnh sửa. Tôi cho rằng bạn không thể hoạt động trên một dòng không thành công ở tất cả, mà làm cho tinh thần. –
Đối với người đọc trễ: Theo [tham chiếu cpp] (http://en.cppreference.com/w/cpp/io/basic_istream/seekg), việc xóa không cần thiết nữa kể từ C++ 11 ... – Aconcagua
Có lẽ ý bạn là trên iostream. Trong trường hợp này, luồng clear()
của luồng sẽ thực hiện công việc.
Tôi đồng ý với câu trả lời ở trên, nhưng đã gặp phải vấn đề tương tự tối nay. Vì vậy, tôi nghĩ rằng tôi sẽ đăng một số mã đó là một chút hướng dẫn hơn và cho thấy vị trí dòng tại mỗi bước của quá trình. Có lẽ tôi nên kiểm tra ở đây ... TRƯỚC KHI ... Tôi đã dành một giờ để tự mình tìm ra điều này.
ifstream ifs("alpha.dat"); //open a file
if(!ifs) throw runtime_error("unable to open table file");
while(getline(ifs, line)){
//......///
}
//reset the stream for another pass
int pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: -1 tellg() failed because the stream failed
ifs.clear();
pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: 7742'ish (aka the end of the file)
ifs.seekg(0);
pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: 0 and ready for action
//stream is ready for another pass
while(getline(ifs, line) { //...// }
- 1. Đặt lại trạng thái của luồng
- 2. pthread Các đối tượng chủ đề đặt lại trạng thái của chúng
- 3. Tìm kết thúc luồng cho cin & ifstream?
- 4. Lấy trạng thái đối tượng
- 5. C hoặc C++ Trạng thái trả lại
- 6. C++, đọc tệp bằng ifstream
- 7. Trạng thái kích hoạt liên kết của nút trong Ember.js
- 8. đối tượng có trạng thái và hành vi trong oop
- 9. Đặt lại trạng thái khôi phục mật khẩu
- 10. Đặt lại trạng thái đầu vào không hợp lệ HTML5
- 11. Khi nào `ifstream :: readome` đặt` eofbit`?
- 12. Làm cách nào để thêm trạng thái tệp git vào trạng thái của vim?
- 13. Khi nào một đối tượng giả nhập vào trạng thái phát lại?
- 14. ngày kết thúc đối tượng lệnh trong Grails
- 15. Đặt mã trạng thái HTTP trong Chai?
- 16. Đặt lại trạng thái đã truy cập trên các liên kết
- 17. Kết nối RabbitMQ trong trạng thái chặn?
- 18. C++ STL bộ: So sánh đối tượng với trạng thái bên ngoài
- 19. Trạng thái con trỏ đối tượng Sau khi phát hiện ra constructor ném ngoại lệ - C++
- 20. Trạng thái HTTP trả lại "đã tạo" trong Play! Khung
- 21. Cập nhật Trạng thái Twitter trong C#
- 22. Đặt lại đối tượng Graphics2D trong Java
- 23. Thao tác không hợp lệ do trạng thái hiện tại của đối tượng
- 24. Trạng thái truy vấn C++ atomic_flag
- 25. cin.clear() không đặt lại đối tượng cin
- 26. Trạng thái của tcl_precision là gì?
- 27. ifstream, kết thúc của dòng và di chuyển đến dòng tiếp theo?
- 28. Trạng thái Voiceover của iOS
- 29. Đặt đối tượng gọi lại kiểu C theo định hướng?
- 30. Lỗi ASP: Thao tác không hợp lệ do trạng thái hiện tại của đối tượng
của tệp ifstream. –