我正在使用MS Visual Studio 2012编译器,我正在x64发布模式下构建。
使用ifstream我可以读取大于4GB的文件。问题是,我无法在10GB文件的中间找到一个位置。
当我使用像is.seekg (5368709120, is.beg);
这样的搜索时,is.tellg();
返回-1,这意味着搜索失败。我确信文件存在且位置5368709120也存在。如果我使用:is.seekg (100, is.beg);
,它的工作完全正常。
使用多次搜索不是一种选择,因为文件可以达到300GB(并且使用许多搜索将会很慢)。
我的问题是:如何在不使用多次搜索的情况下寻求在10GB文件上正常工作?
答案 0 :(得分:5)
如何在不使用多次搜索的情况下寻求在10GB文件上正常工作?
忘记帖子的其余部分,这个问题的答案(在Windows中)非常简单:使用_fseeki64
。在处理大文件时,我没有看到下降到较低级API的问题 - 你最有可能做大块读/写吗?您可以轻松地使用fread
和fwrite
。
如果您坚持使用STL,Microsoft的实施将无法正常运行。我听说STLPort处理大文件搜索,所以你可以去做。虽然这是一个相当沉重的方法,但我坚持使用基本fseek
。