I tried to read a 3GB data file using ifstream and it gives me wrong file size, whereas when I read a 600MB file, it gives me the correct result. In addition to wrong file size, I am also unable to read the entire file using ifstream.
Here is the code that I used
std::wstring name;
name.assign(fileName.begin(), fileName.end());
__stat64 buf;
if (_wstat64(name.c_str(), &buf) != 0)
std::cout << -1; // error, could use errno to find out more
std::cout << " Windows file size : " << buf.st_size << std::endl;;
std::ifstream fs(fileName.c_str(), std::ifstream::in | std::ifstream::binary);
fs.seekg(0, std::ios_base::end);
std::cout << " ifstream file size: " << fs.tellg() << std::endl;
The output for 3GB file was
Windows file size : 3147046042
ifstream file size: -1147921254
Whereas the output for 600 MB file was
Windows file size : 678761111
ifstream file size: 678761111
Just in case, I also tested for 5GB file and 300 MB file,
The output for 5GB file was
Windows file size : 5430386900
ifstream file size: 1135419604
The output for 300MB file was
Windows file size : 318763632
ifstream file size: 318763632
It looks to me like it is reaching some limit.
I am testing the code using Visual Studio 2010 on a Windows Machine which has plenty of memory and disk space.
I am trying to read some large files. Which is a good stream reader to use if ifstream can't read large files?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…