代码之家  ›  专栏  ›  技术社区  ›  Joe

iostream和大文件支持

  •  7
  • Joe  · 技术社区  · 15 年前

    我正试图找到一个确定的答案,但不能,所以我希望有人能知道。

    我正在使用Linux(32位操作系统)上的GCC 4。x开发C++应用程序。此应用程序需要能够读取大小为2GB的文件。

    我真的很想使用iostream的东西和文件指针,但是我找不到大文件定义(_large file_source,_large file 64_source,_file_offset_bits=64)是否对iostream头有任何影响。

    我正在32位系统上编译。任何提示都是有用的。

    2 回复  |  直到 6 年前
        1
  •  8
  •   Tim Cooper    13 年前

    这已经为你决定了什么时候 libstdc++ 是编译的,通常取决于 _GLIBCXX_USE_LFS 定义在 c++config.h .

    如果有疑问,请传递可执行文件(或 libstdc++.so ,如果动态链接到它)通过 readelf -r (或通过 strings )看看你的二进制文件/ LIbSTDC++ 联系起来反对 fopen / fseek 或… fopen64 / fseek64 等。

    更新

    只要不需要/尝试 费雪 ftell (您只是从流中读或写。)

        2
  •  2
  •   Christopher Dolan    15 年前

    如果使用gcc,可以利用gcc扩展名uugnu_cxx::stdio_filebuf,它将iostream绑定到标准C 文件 描述符。

    您需要定义以下两个方面:

    _大文件源

    _文件偏移量位=64

    例如:

    #include <cstdio>
    #include <fstream>
    #include <ext/stdio_filebuf.h>
    
    int main()
    {
      std::ofstream outstream;
      FILE* outfile;
    
      outfile = fopen("bigfile", "w");
    
      __gnu_cxx::stdio_filebuf<char> fdbuf(outfile, std::ios::out |
                                           std::ios::binary);
      outstream.std::ios::rdbuf(&fdbuf);
    
      for(double i = 0; i <= 786432000000.0; i++) {
        outstream << "some data";
    
      fclose(outfile);
      return 0;
    

    }