我尝试使用 ifstream 读取一个3GB的数据文件,但是它给了我错误的文件大小。而当我读取一个600MB的文件时,它给出了正确的结果。除了错误的文件大小之外,我还无法使用 ifstream 读取整个文件。
以下是我使用的代码:
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;
3GB文件的输出结果为
Windows file size : 3147046042
ifstream file size: -1147921254
对于600 MB文件的输出结果为
Windows file size : 678761111
ifstream file size: 678761111
万一的情况下,我还测试了5GB文件和300MB文件的情况,
5GB文件的输出结果为:
Windows file size : 5430386900
ifstream file size: 1135419604
300MB 文件的输出结果为:
Windows file size : 318763632
ifstream file size: 318763632
在我看来,它似乎达到了某个限制。
我正在使用拥有充足内存和磁盘空间的Windows计算机上的Visual Studio 2010测试代码。
我尝试读取一些大型文件。如果ifstream无法读取大型文件,那么使用哪种好的流阅读器?
ifstream
测试吗? - WhozCraigstat()
(而不是_wstat64()
)是否表现类似,以及在64位实现上ifstream
是否表现不同。 - WhozCraig