2010-12-10 4 views
7

이진 파일 처리를하고 있는데 알고리즘의 실제 유형을 pos_typeoff_type으로 알고 싶습니다. 예를 들어 파일 크기를 계산하거나 주어진 위치 (tellgseekg).STL을 사용하여 C++에서 2GB보다 큰 파일 처리

파일 크기를 계산할 때 static_castpos_type에서 int64_t으로 잘 작동하는 것 같습니다.

어때 대략 seekg? int64_t을 전달하는 것이 안전합니까?

pos_typeoff_type될 수 있도록하는 방법이있는int64_t, 아마도traits를 사용하고 계십니까?

나는 끔찍한 캐스트를 제거하고 C++ 표준에 맞는 방법을 찾고 싶습니다.

업데이트 : 당신은 아마 표준 :있는 fpos_t 타입 정의 사용해야도

+0

어떤 플랫폼/버전입니까? – Joe

+0

플랫폼 독립적 인 방법 :) – Ali

+5

이러한 종류의 질문은 플랫폼에 독립적 인 방식으로 대답 할 수 없습니다. 각 플랫폼마다 자체 제한을 자유롭게 선택할 수 있기 때문입니다. –

답변

10

모든 컴파일러에서 대용량 파일을 지원하는 STL 구현이있는 것은 아닙니다. 2147483647

  • VS2008 - - 2147483647
  • VS2010 - 9223372036854775807
  • 는 MinGW GCC 4.4.0

    • VS2005 예 :

      다음 프로그램 :에

      #include <fstream> 
      #include <iostream> 
      #include <limits> 
      
      int main() 
      { 
          using namespace std; 
      
          cout << numeric_limits<streamoff>::max() << endl; 
      } 
      

      결과 - 9223372036854775807

    반면에 STLPort은 크로스 플랫폼 대용량 파일을 지원합니다.

  • 1

    를 참조하십시오.

    +0

    그것은 ctsdio에 있으며 fstream에서 어떻게 사용할 수 있는지 알 수 없습니다. – Ali