我想寫一些簡單的代碼,它將讀取文本文件,但讀取第一行兩次。我認爲這會像這樣簡單seekg()函數失敗
std::ifstream file;
file.open("filename", std::ios_base::in);
std::string line;
std::getline(file, line);
// process line
file.seekg(0, ios::beg);
while (std::getline(file, line))
{
// process line
}
但是,由於第一行不會被處理兩次,seekg必須失敗。任何想法爲什麼?
請注意:這不是我所面臨的問題,但它以免必須粘貼多個類別代碼和多種功能的簡化版本。真正的問題涉及將文件指針傳遞給多個類中的多個函數。第一個函數可能調用也可能不調用,並讀取文件的第一行。第二個函數讀取整個文件,但必須先調用seekg以確保我們處於文件的開頭。
我只是用上面的代碼以簡化討論。
第一'的std :: getline'呼叫可能設置EOF標誌。 – ildjarn
@ildjarn它確實,但它不是問題。 'seekg'在它做任何事之前清除eof標誌。 'char *'的'getline'有時會設置'failbit',而不是'std :: string'超載。此外,我驗證了這個問題...... – Potatoswatter
@Potatoswatter:「*'seekg'在它做任何事情之前清除了eof標誌*」我沒有意識到這一點,謝謝。 : - ] – ildjarn