Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Seeking in large files with ifstream

I'm implementing a program in C++ using ifstream that must seek in large files (~1TB). However, this fails after reading 2GB. Is there a way to get file positions, even for large files? I compile for a 32-bit windows machine.

std::ifstream f;
f.open( filename.c_str(), std::ifstream::in | std::ifstream::binary );
while(true) {
    std::cout << (uint64_t)(f.tellg()) << std::endl;
    //read data
}
like image 810
Patrik Avatar asked Jul 12 '12 09:07

Patrik


1 Answers

Since you are compiling on a 32-bit platform, if you use fstream, you are going to get 32-bits access. To access large files, you need to use a platform dependent solution :

  • for windows, use _lseeki64()
  • for linux, use lseek64()
like image 76
BЈовић Avatar answered Sep 21 '22 15:09

BЈовић