3
在一些使用std::ofstream
執行大量文件I/O的代碼中,我正在緩存流以提高效率。但是,有時我需要更改文件的openmode(例如append vs truncate)。下面是一些類似的模擬代碼:更改或檢查std :: ofstream的openmode
class Logger {
public:
void write(const std::string& str, std::ios_base::openmode mode) {
if (!myStream.is_open) myStream.open(path.c_str(), mode);
/* Want: if (myStream.mode != mode) {
myStream.close();
myStream.open(path.c_str(), mode);
}
*/
myStream << str;
}
private:
std::ofstream myStream;
std::string path = "/foo/bar/baz";
}
有誰知道:
- 有一種方法來改變
ofstream
的用於openmode? - 如果不是,有沒有辦法找出
ofstream
的當前openmode
是什麼,所以我只能在必要時關閉並重新打開它?
你可能想了解(這些)(http://en.cppreference.com/w/cpp/io/basic_ofstream)狀態的功能,允許您設置或國旗迴歸..... – Recker
我只是好奇你爲什麼要改變它?什麼時候適用這樣的條件? –
@noleptr我看着這些,但他們不讓你改變文件的開放模式。你只能得到/設置'goodbit','badbit','failbit','eofbit'。 @BartekBanachewicz我正在重做庫的一部分的實現。我不確定在什麼情況下你確實需要這個,但我需要保持和以前一樣的行爲。以前,這是通過特定於平臺的系統調用來完成的,它可以讓您查詢文件的狀態。 – Ari