2013-06-19 4 views
1

C++ 표준 라이브러리를 사용하여 파일 크기를 조정하는 방법에 대한 합리적인 해결책을 찾지 못한 것에 놀랐습니다. 원본 파일에서 데이터를 읽은 다음 다른 파일에 써야한다는 것은 완전히 어리 석고 낭비스러운 것 같습니다. 간단히 말해서 크기를 초과하는 데이터를 잘라내는 크기 조정 메서드가 필요합니다.이 작업을 수행 할 수있는 것이 있습니까?C++에서 파일 크기 조정

편집 : 내가 위에서 설명한 방법을 사용해야 할 경우, 어떻게 큰 내 버퍼 내가 읽기/쓰기로 사용하고 있음을해야 하는가? 나는 분명히 한꺼번에 전체 파일을 읽을 수 없다. 왜냐하면 내가 여기에 상당히 큰 파일로 작업하고 있기 때문이다.

+0

이렇게하면 정리해야 할 파일 조각화가 발생하지만 파일 끝을 EOF 문자로 덮어 쓸 수 있습니까? – Precastic

+0

큰 그림은 무엇입니까? "크기 조정"에는 많은 의미가 있습니다! –

+0

프로젝트에서 OS API를 호출 할 수 있습니까? 리눅스는 시스템 호출'truncate'를 파일을 지정된 길이로 설정합니다. 나는 Windows가 비교 API를 제공 할 것이라고 생각한다. BTW, 당신의 플랫폼은 무엇입니까? –

답변

0

는 대부분 Image Magick 같은 이미지 처리의 SDK의 특징이다, 더 높은 수준의 언어 꽤 복잡한 작업이다. 크기 조정 품질이나 지원되는 형식에 대한 특정 요구 사항이없는 경우

나는 마크의 대답은 가장 쉬운 방법이 될 것 같아요. 그렇지 않으면 그래픽 형식 라이브러리를 포함하고 수동으로 일부 크기 조정 알고리즘을 구현해야합니다 (또는 lib도 일부 사용합니다). 표준이 기능을 설명하지 않기 때문에

+0

질문에 답변 해 주셔서 감사합니다. 나는 내가 읽기/쓰기 방법으로 갈 것이라고 생각한다. – hetelek

+0

어디에서 이미지/사진을 가져 왔습니까? OP는 아무런 언급도하지 않습니다. –

7

당신은 Boost.Filesystem 의해 제공되는 기능, 즉 그 resize_file() 기능을 사용할 수있다.

Boost.Filesystem이 (될 예정)되어 있습니다 언어 표준의 미래 반복에 포함되어 있습니다. here을 참조하십시오. Boost를 프로젝트에서 사용하고 싶지 않다면 좋은 소식입니다.

또한 @BenjaminLindley가 언급 한 바와 같이 <filesytem> 헤더는 Visual Studio 2012 (see here, "파일 시스템"검색)에서 이미 사용할 수 있습니다. 파일은 전체 이미지를로드하지 않고 크기를 조정

+0

고마워요.하지만 불행히도 내 프로젝트는 Boost에 의존하지 않고이 방법으로 유지하려고합니다. – hetelek

+1

@hetelek 왜 안 되니? 당신이 제공하는 모든 것을 사용할 수는 없겠지만 개발 시간의 상당 부분을 절약 할 수있는 부분을 찾을 수있을 것입니다. –

+0

@MarkGarcia 나는 Boost와는 아무런 관계가 없다.하지만 다른 곳에서는 부스트에 의존하지 않는 커다란 프로젝트가있다. 또한 표준 라이브러리에만 의존한다는 사실을 즐기기도합니다. – hetelek

0

사실, 파일 크기 조정에 대한 크로스 플랫폼 방법은 존재하지 않는다. 그러나 here라고되어 있듯이이 목적을위한 플랫폼 API가 있습니다. Windows에서는 _chsize() 함수를, POSIX 시스템에서는 truncate() 및 ftruncate() 함수를 참조하십시오.