FILE*
을 스트림에 직접 쓸 수 없습니다. 실제 파일 내용 대신 메모리 주소를 작성하므로 원하는 결과를 얻을 수 없습니다.
이상적인 솔루션은 ifstream
에서 읽고 ofstream
에 기록하는 것입니다,하지만 FILE*
에서 ifstream
를 구성 할 수있는 방법이 없습니다.
그러나 streambuf
클래스를 확장하여 FILE*
에서 작동하도록 만든 다음 istream
으로 전달할 수 있습니다. 빠른 검색을 통해 누군가 이미이를 구현했으며, 적절하게 이름이 popen_streambuf
인 것으로 나타났습니다. this specific answer을 참조하십시오.
귀하의 코드는 다음과 같을 것이다 :
의견
Simon Richter에 의해 지적
std::ofstream output("triangulation/delaunayedpoints.txt");
popen_streambuf popen_buf;
if (popen_buf.open("qdelaunay < triangulation/rawpoints.txt", "r") == NULL) {
std::cerr << "Failed to popen." << std::endl;
return;
}
char buffer[256];
std::istream input(&popen_buf);
while (input.read(buffer, 256)) {
output << buffer;
}
output.close();
이 streambuf
를 받아 EOF에 도달 할 때까지 ostream
에 데이터를 쓰는 operator<<
있다. 귀하의 예제에서, 당신은 또한`출력 << & popen_buf를 사용할 수
std::ofstream output("triangulation/delaunayedpoints.txt");
popen_streambuf popen_buf;
if (popen_buf.open("qdelaunay < triangulation/rawpoints.txt", "r") == NULL) {
std::cerr << "Failed to popen." << std::endl;
return;
}
output << &popen_buf;
output.close();
노트,''연산자 << (표준이 있기 때문에, 데이터를 복사 : : :이 방법은 코드를 단순화 할 것 ostream &, std :: streambuf *);'. –
@ 사이먼 리히터 : 오, 나는 완전히 그것을 놓쳤다! 귀하의 제안을 언급하도록 업데이트되었습니다. 고맙습니다! – jweyrich