我试图使用ifstream读取3GB数据文件,它给了我错误的文件大小,而当我读取600MB文件时,它给了我正确的结果。除了错误的文件大小之外,我也无法使用ifstream读取整个文件。ifstream :: 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文件和300 MB文件,
为5GB文件的输出是
Windows file size : 5430386900
ifstream file size: 1135419604
为300MB的文件输出为
Windows file size : 318763632
ifstream file size: 318763632
它看起来对我来说,它达到一定的限制。
我在Windows计算机上使用Visual Studio 2010测试代码,该计算机具有大量内存和磁盘空间。
我想读取一些大文件。如果ifstream无法读取大文件,那么使用哪种流式阅读器?
我注意到你直接调用_wstat64。你在编译32位二进制文件吗?你是否尝试过64位二进制文件进行ifstream测试? – WhozCraig 2013-05-01 19:24:06
@WhozCraig:如果文件系统没有,32位代码应该能够处理超过2GB的文件,如果不是这是一个非常糟糕的错误。 – 2013-05-01 19:26:55
@BenVoigt我同意,如果在32位实现中'stat()'(而不是'_wstat64()')的行为相似,并且在64位实现中'ifstream'行为*不同*,我只是好奇而已。 – WhozCraig 2013-05-01 19:29:18