2010-02-14 2 views

답변

2

나는 그렇게 생각하지 않습니다. 적어도 Windows에서는 HANDLE<->int<->FILE *에 대한 래퍼 계층 구조를 "위아래로"움직이기위한 많은 함수가 있지만 iostreams 객체에서 FILE *을 추출하는 "적절한"방법은 없습니다 (실제로 구현 된 경우도 마찬가지입니다).

this question이 도움이 될 수 있습니다.

개인적으로 나는 iostream을 명확하게 처리 할 것을 강력히 권장합니다. 이들은 저조한 디자인, 무겁게 C++ 및보기에 고약합니다. Boost's iostreams을 보거나 클래스를 사용해야하는 경우 stdio.h을 입력하십시오.

stdio 관련 함수는 ftruncate()입니다.

0

운영체제에 따라 다릅니다. 대부분의 OS는 이것을 지원하지만, 다른 방법으로 지원합니다. Windows의 경우 SetEndOfFile()이 있습니다. 유닉스와 유사한 시스템에서는 파일을 끝내려는 곳인 lseek을 가지고 거기에 0 바이트가 lwrite이된다. 다른 OS는 의심의 여지없이 다른 방법을 사용합니다.

+0

분명히 유닉스에서'ftruncate (2)'를 사용할 것입니다. –

1

Boost.Interprocess 라이브러리는 휴대용 truncate 기능을 정의합니다. 어떤 이유로 문서화되지 않았지만 this header file을 찾을 수 있습니다.

+0

'ftruncate'는 Posix에서와 같이 이식 가능합니다. 그러나 C++ 스트림은 사용하지 않습니다. –

+0

예 Posix와 Win32에서 사용할 수있는 휴대용 제품입니다. – Manuel

0

끝에 총알을 비트하고 배열에 보관할 파일의 부분을 읽은 다음 다시 씁니다. 그것은 최선의 해결책이 아닙니다. 그러나 파일이 항상 작을수록 나는이 방법을 받아들이기로 결정했습니다.

+1

왜 C 파일 I/O를 사용하고 C++ 스트림 (작업에 잘못된 도구 인 것처럼 보임)에서 부과 된 한계를 극복하기보다는 직접 사용합니까? –