2014-02-24 2 views
2

두 개의 이진 파일이 있고 다른 하나를 추가하고 싶습니다. 어떻게해야합니까?C++에서 이진 파일로 이진 파일을 추가하는 방법

std::ofstream outFile; 
outFile.open("file.bin", ?); 

무엇이 중첩 줄이어야합니까?

+0

파일 2의 모든 것을 읽고 파일 1에 씁니다. – deviantfan

+0

아마 하나의 파일을 읽고 다른 파일을 작성해야합니다. 당신이 실제로 시도한 것을 보여주지 않는 이유는 무엇입니까? – harper

+0

첫 번째 파일에 쓰는 동안 두 번째 (원본) 파일에서 읽는 첫 번째 (대상) 파일의 끝까지 검색하여 이진 모드에서 파일을 열고 엽니 다. 그리고 네, 그걸 도와 줄 수있는 몇 가지 [오픈 모드 플래그] (http://en.cppreference.com/w/cpp/io/ios_base/openmode)가 있습니다. –

답변

0

이 가장 최적이 아닌,하지만 당신은 같은 것을 시도 할 수 있습니다 :

std::ofstream outFile("file.bin", ios_base::app | ios_base::out); 

std::ifstream inFile(source_file_name, ios_base::binary | ios_base::in); 
source >> noskipws; 
char c; 
while (inFile >> c) { 
    outFile << c; 
} 

을 당신은 아마 수 있도록 더 큰 버퍼를 사용하여 효율을 높일 수 있습니다.

3

해당하는 하나의 라이너있다 : 괄호

std::ofstream outFile("file.out", std::ios::ate); 
std::ifstream inFile("file.in"); 

std::copy( 
    (std::istreambuf_iterator<char>(inFile)), // (*) 
    std::istreambuf_iterator<char>(), 
    std::ostreambuf_iterator<char>(outFile) 
); 

(*) 여벌 함수로서 선언이 파싱 방지한다.

더 나은 성능을 얻으려면 ifstream::read을 사용하여 청크 파일을 읽고 ofstream::write으로 작성하십시오.

+0

니스. 작은 말 : 'ios :: app'으로 outFile을 열면 안된다? –

+0

@MartinJ. 고마워, 틀린 사람. 'ate','app', 우리가 글을 쓰지 않고서는별로 중요하지 않습니다. – jrok

+0

@JoachimPileborg 필자는'streambuf' 이터레이터를 사용할 때 필요하지 않다는 인상을 받았습니다. 윌 더블 체크. – jrok