如何连续两次读取同一文件

Cel*_*tas 10 c++ file-io

我读了一次文件,找到它包含的行数,然后再读一遍,这样我就可以将每行的一些数据存储在一个数组中.是否有更好的方式来阅读文件两次而不是关闭并再次打开它?这是我得到的,但我担心这是低效的.

int numOfMappings = 0;
ifstream settingsFile("settings.txt");
string setting;
while(getline(settingsFile, setting))
{
    numOfMappings++;
}
char* mapping = new char[numOfMappings];
settingsFile.close();
cout << "numOfMappings: " << numOfMappings << endl;
settingsFile.open("settings.txt");
while(getline(settingsFile, setting))
{
    cout << "line: " << setting << endl;
}
Run Code Online (Sandbox Code Playgroud)

161*_*903 22

settingsFile.clear();
settingsFile.seekg(0, settingsFile.beg);
Run Code Online (Sandbox Code Playgroud)


Mar*_*sen 5

要将文件倒回到其开头(例如再次阅读),您可以使用ifstream::seekg()更改光标的位置并ifstream::clear()重置所有内部错误标志(否则它会显示您仍在文件的末尾)。

其次,您可能需要考虑只读取一次文件并将您需要知道的内容存储在临时文件中std::dequestd::list在解析文件时存储。std::vector如果稍后需要该特定容器,您可以从临时容器构造一个数组(或 )。