回答
std::ofstream
文件不直接支持此操作。如果這是一個重要的要求,你可以做什麼是創建一個過濾流緩衝區,它在內部使用std::filebuf
,但也記錄是否有任何輸出完成。這可能看起來看起來像這樣簡單:
struct statusbuf:
std::streambuf {
statusbuf(std::streambuf* buf): buf_(buf), had_output_(false) {}
bool had_output() const { return this->had_output_; }
private:
int overflow(int c) {
if (!traits_type::eq_int_type(c, traits_type::eof())) {
this->had_output_ = true;
}
return this->buf_->overflow(c);
}
std::streambuf* buf_;
bool had_output_;
};
可以初始化與此一std::ostream
並根據需要查詢流緩衝區:
std::ofstream out("some file");
statusbuf buf(out.rdbuf());
std::ostream sout(&buf);
std::cout << "had_output: " << buf.had_output() << "\n";
sout << "Hello, world!\n";
std::cout << "had_ouptut: " << buf.had_output() << "\n";
您可以使用ofstream.rdbuff來獲取文件緩衝區,並使用streambuf::sgetn來讀取它。我相信這應該工作。
不,它不會工作:當前正在寫入的流緩衝區的讀取緩衝區通常不會被填充。這兩個緩衝區沒有任何關係,並且它們不會保持同步。 – 2012-02-09 06:31:28
我現在要試試這個 – WeaselFox 2012-02-09 06:37:07
當然,給它一個。但是,即使存在標準庫實現,甚至是大部分實現它的實現,確定其工作原理的方式也是讀取標準。我很確定標準不能保證這一點,我所做的實現當然不會保持兩個緩衝區同步。 – 2012-02-09 06:40:12
- 1. 檢查dataGridView是否爲空
- 2. 檢查JValue是否爲空
- 3. 檢查imageView是否爲空
- 4. 檢查tabControl1是否爲空?
- 5. 檢查CSV是否爲空
- 6. 檢查double是否爲空
- 7. 檢查列是否爲空
- 8. 檢查ALAssetsLibrary是否爲空
- 9. 檢查ArrayCollection是否爲空
- 10. laravel檢查是否爲空
- 11. 檢查textarea是否爲空
- 12. 檢查NumericUpDown是否爲空
- 13. 檢查ImageSource是否爲空
- 14. 檢查是否爲空JasperReports
- 15. 檢查是否爲空JFormattedTextField
- 16. 檢查editText是否爲空
- 17. 檢查JTextField是否爲空
- 18. 檢查是否爲空VB.NET
- 19. 檢查StringBuffer是否爲空
- 20. 檢查OnAction是否爲空
- 21. 檢查NSDictionary是否爲空
- 22. 檢查JTextFields是否爲空
- 23. 檢查managedobjectcontext是否爲空?
- 24. 檢查它是否爲空
- 25. 檢查stderr是否爲空
- 26. 檢查NSRect是否爲空
- 27. 檢查DataView是否爲空
- 28. 檢查是否爲空DataRow
- 29. 檢查EditText是否爲空
- 30. 檢查TextView是否爲空?
廣東話你EOF或rdstate功能檢查呢? – sarat 2012-02-09 06:29:34