Если причина, по которой вам нужно «вернуться назад», заключается в том, что вы не можете продолжить без размера, попробуйте изменить порядок настройки.
То есть прочитайте файл, сохраняя каждую строку в std::vector<string>
или что-то в этом роде. Тогда у вас есть размер вместе со строками в файле:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
int main(void)
{
std::fstream file("main.cpp");
std::vector<std::string> fileData;
// read in each line
std::string dummy;
while (getline(file, dummy))
{
fileData.push_back(dummy);
}
// and size is available, along with the file
// being in memory (faster than hard drive)
size_t fileLines = fileData.size();
std::cout << "Number of lines: " << fileLines << std::endl;
}
Вот решение без контейнера:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
int main(void)
{
std::fstream file("main.cpp");
size_t fileLines = 0;
// read in each line
std::string dummy;
while (getline(file, dummy))
{
++fileLines;
}
std::cout << "Number of lines: " << fileLines << std::endl;
}
Хотя я сомневаюсь, что это самый эффективный способ. Преимущество этого метода заключалось в возможности сохранять строки в памяти по ходу работы.