2012-04-08 2 views
2

파일에 linked_list를 유지 관리하는 프로그램을 작성 중입니다. 그래서 tellp()/tellg()를 사용하여 파일을 가로 지르며 새로운 긴 위치에 도달하기 위해 특정 긴 정수 (오프셋으로 볼 수 있음)에 추가합니다.tellp(), tellg() 반환 유형을 수집하고 저장하는 방법은 무엇입니까?

간단한 예 그래서 여기

long next_offset = sizeof(long) + sizeof(int) .... 
    //like size of all the elements in the record, etc 

    curr_node = out.seekg(); 
    while(curr_node != -1) { 
      out.read(...); 
      **curr_node.seekg(curr_node.tellp() + next_offset);** 
      out.read((char *)&curr_node,sizeof(long)); 
    } 

것 기본적으로 내가 tellp() 값만큼 절약과 긴 추가 DNG하고,이 벌금입니까 ?? 또는 pos_value가 커질 때 나는 약간의 비트를 잃을 수도있는 기회가 있습니까 ???

답변

2

tellp/tellg (streampos)에 의해 반환 된 이러한 값은 사용중인 플랫폼에 최대 파일 크기를 저장하기위한 것이므로 오래 사용할 수 있다는 보장은 없습니다. 사실, 디스크 저장 공간은 대개 주소 공간보다 큰 순서이고, 기본 유형은 나중에 염두에두고 정의 되었기 때문에 size_t, long long 또는 가장 큰 기본 유형이 무엇이든간에 적합하지 않을 수 있습니다.

IMO는 드물지만 대용량 파일 (DBMS 등)을 처리해야하는 프로그램을 작성하지 않는 한 다른 유형의 큰 파일을 사용하지 않는 것이 좋습니다. 예상되는 최대 크기가 길면 파일보다 큰 파일을 만들거나 처리하지 못하도록 프로그램에 보호 기능을 설정하기 만하면됩니다.

반면에 엄청난 양의 파일을 처리해야하는 경우에는 작업이 훨씬 복잡해지고 포괄적 인 대답이 더 길어집니다.

관련 문제