在C++中查找超过4GB的文件?

zET*_*ETO 4 c++ iostream stl visual-studio

我正在使用MS Visual Studio 2012编译器,我正在x64发布模式下构建.

使用ifstream我可以读取大于4GB的文件.问题是,我无法在10GB文件中找到一个位置.

当我像这样使用seekg is.seekg (5368709120, is.beg);然后is.tellg();返回-1,这意味着搜索失败.我确信文件存在且位置5368709120也存在.如果我使用它,它的工作完全正常:is.seekg (100, is.beg);例如.

使用多次搜索不是一种选择,因为文件可以达到300GB(并且使用许多搜索将会很慢).

我的问题是:如何在不使用多次搜索的情况下寻求在10GB文件上正常工作?

Bli*_*ndy 5

如何在不使用多次搜索的情况下寻求在10GB文件上正常工作?

忘记帖子的其余部分,这个问题的答案(在Windows中)非常简单:使用_fseeki64.在处理大文件时,我没有看到下降到较低级API的问题 - 你最有可能做大块读/写吗?您可以轻松地使用freadfwrite为.

如果你坚持STL,微软的实施将无法运作.我听说STLPort处理大文件搜索,所以你可以去做.这是一个相当沉重的方法,但我坚持基本fseek.