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

时间:2013-05-06 06:58:40

标签: 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;
}

4 个答案:

答案 0 :(得分:21)

settingsFile.clear();
settingsFile.seekg(0, settingsFile.beg);

答案 1 :(得分:4)

效率低下,请使用std::vector并仅读取一次文件。

vector<string> settings;
ifstream settingsFile("settings.txt");
string setting;
while (getline(settingsFile, setting))
{
    settings.push_back(setting);
}

答案 2 :(得分:4)

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

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

答案 3 :(得分:0)

只需使用:

settingsFile.seekg(0, settingsFile.beg);

这会将文件指针倒回到最开头,因此您可以在不关闭和重新打开的情况下再次读取它。