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

时间:2015-08-18 18:29:24

标签: c++ visual-studio stl iostream

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

  

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

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

如果您坚持使用STL,Microsoft的实施将无法正常运行。我听说STLPort处理大文件搜索,所以你可以去做。虽然这是一个相当沉重的方法,但我坚持使用基本fseek