Как получить размер файла для больших файлов в С++ - программирование
Подтвердить что ты не робот

Как получить размер файла для больших файлов в С++

Я хочу знать размер файла в С++ без использования нестандартного _64 (f) stat thingy. В соответствии с qaru.site/info/15742/... ответ должен быть

using namespace std;
ifstream::pos_type filesize(const char* filename)
{
    ifstream in(filename, ifstream::ate | ifstream::binary);
    return in.tellg(); 
}

Но мой 64-разрядный пример в VS 2013 Update5 показывает странное поведение: если файл меньше 4G, то решение выше работает, иначе оно возвращает -1.

ofstream myfileo("example.bin", ios::binary); // create an example file
auto pos = (4ULL * 1024 * 1024 * 1024); // 4 Gigs
myfileo.seekp(pos);
myfileo << "This is a line.\n";
myfileo.close();

ifstream myfile("example.bin", ios::binary | ios::ate); // get filesize V1
auto len = myfile.tellg();
myfile.close();
cout << "size is: " << len << " bytes.\n"; // only works if file < 4G

Следующий код работает для всех случаев.

ifstream myfile("example.bin", ios::binary); // get filesize V2
myfile.seekg(0, ios::end);
auto len = myfile.tellg();
myfile.close();
cout << "size is: " << len << " bytes.\n"; // works also for files > 4G 

Итак, это просто проблема с MS или я что-то пропустил?

4b9b3361