C++에서는 이진 데이터를 쓰기 위해 이진 파일, 특히 “ofstream” 클래스와 상호 작용하는
C++를 사용하여 바이너리 파일 작성
C++를 사용하여 데이터를 바이너리 파일에 저장하려면 write() 메서드가 사용됩니다. 이 함수는 'put' 포인터 위치에서 시작하여 지정된 스트림에 지정된 바이트 수를 씁니다. 'put' 포인터가 끝에 있으면 파일이 확장됩니다. 그러나 포인터가 파일 내에 있으면 새 데이터가 기존 문자를 덮어씁니다. 쓰기 과정에서 오류가 발생하는 경우 스트림은 오류 상태로 표시됩니다. 이제 몇 가지 간단하고 내장된 C++ 함수를 사용하여 바이너리 파일을 작성하는 방법을 알아보기 위해 예제를 살펴보겠습니다.
방법 1: 구조화된 데이터로 바이너리 파일 작성
많은 경우 사용자 정의 구조와 같은 구조화된 데이터를 바이너리 파일에 작성해야 할 수도 있습니다. 사람의 이름, 키, 나이가 포함된 사람의 기록이 포함된 예를 생각해 보겠습니다. 다음 주어진 코드를 보고 설명을 살펴보세요.
#include
#include
구조체 사람 {
숯 이름 [ 오십 ] ;
정수 나이 ;
더블 키 ;
} ;
정수 기본 ( ) {
성병 :: 스트림의 파일 출력 ( '사람.빈' , 성병 :: iOS :: 바이너리 ) ;
만약에 ( ! outFile. is_open ( ) ) {
성병 :: 세르 << '오류! 쓰기 위해 파일을 열 수 없습니다!' << 성병 :: 끝 ;
반품 1 ;
}
사람 사람1 = { '칼룸 일리아스' , 25 , 1.75 } ;
사람 사람2 = { '칼숨 바좌' , 30 , 1.68 } ;
outFile. 쓰다 ( 재해석_캐스트 < 숯 *> ( & 사람 1 ) , 크기 ( 사람 1 ) ) ;
outFile. 쓰다 ( 재해석_캐스트 < 숯 *> ( & 사람2 ) , 크기 ( 사람2 ) ) ;
outFile. 닫다 ( ) ;
성병 :: 시합 << '그 사람의 기록이 바이너리 파일에 성공적으로 기록되었습니다.' << 성병 :: 끝 ;
반품 0 ;
}
다음은 구체적인 세부정보가 포함된 코드 분석입니다. 프로그램은 'Person'이라는 사용자 정의 구조를 정의하는 것으로 시작됩니다. 여기에는 이름, 나이, 키의 세 가지 필드가 있습니다. 해당 필드의 세부정보는 다음과 같습니다.
- 이름: 사람의 이름을 저장할 문자열(최대 50자)
- 나이: 사람의 나이를 저장할 정수
- 키: 사람의 키를 저장하는 double
'Person' 구조를 정의한 후 프로그램의 진입점인 주요 기능이 시작됩니다. 메인 프로그램의 첫 번째 줄은 'people.bin'이라는 파일을 엽니다. 우리는 'std::ofstream'을 사용하여 바이너리 형식으로 데이터를 쓰기 위해 'people.bin'이라는 파일을 생성합니다. 파일이 성공적으로 열리는지 확인하는 것은 매우 중요합니다. 그렇지 않으면 오류 메시지가 표시되고 프로그램이 중지됩니다. 따라서 'if' 조건과 is_open() 함수를 사용하여 파일이 성공적으로 열렸는지 여부를 확인합니다.
여기서는 두 개의 'Person' 개체가 생성됩니다. 'Person' 유형의 'person1'과 'person2'라는 두 개의 변수를 정의합니다. “Kalsoom Ilyas”와 “Kalsoom Bajwa”에 변수 이름, 나이, 키 값을 할당합니다.
이제 바이너리 파일에 쓸 데이터가 생겼으니 write() 함수로 실제 함수를 수행해 보겠습니다. 'outFile.write'를 사용하여 각 'Person' 개체의 내용을 파일에 씁니다. 'reinterpret_cast
파일에 데이터를 쓴 후에는 다른 기능으로 인해 데이터가 손실되지 않도록 올바르게 닫는 것이 매우 중요합니다. outFile.close()를 사용하여 파일과 연결된 리소스를 해제하고 데이터가 정확하게 기록되었는지 확인합니다. 마지막으로 데이터가 바이너리 파일에 성공적으로 기록되었음을 확인하는 메시지를 인쇄합니다.
이 예를 더 간단한 용어로 설명한다면, 비밀 언어로 된 사람에 대한 정보만 저장할 수 있는 특별한 노트북을 상상해 보세요. 이 코드는 정보(이름, 나이, 키)를 정리하기 위한 청사진을 생성합니다. 노트를 열어 두 사람의 프로필을 작성하고, 그 정보를 비밀 언어로 번역해 그 안에 깔끔하게 적는다. 그런 다음 노트북을 안전하게 닫고 나중에 사용할 수 있도록 프로필을 보존합니다. 다음 스냅샷에 제공된 프로그램의 출력을 참조하세요.
방법 2: 바이너리 파일에 정수 쓰기
이 방법에서는 정수 배열이 'integers.bin'이라는 이진 파일에 기록됩니다. 'reinterpret_cast
#include
정수 기본 ( ) {
성병 :: 스트림의 파일 출력 ( '정수.bin' , 성병 :: iOS :: 바이너리 ) ;
만약에 ( ! outFile. is_open ( ) ) {
성병 :: 세르 << '오류! 쓰기 위해 파일을 열 수 없습니다!' << 성병 :: 끝 ;
반품 1 ;
}
정수 숫자 [ ] = { 42 , 99 , - 1 , 0 } ;
outFile. 쓰다 ( 재해석_캐스트 < 숯 *> ( 숫자 ) , 크기 ( 숫자 ) ) ;
outFile. 닫다 ( ) ;
성병 :: 시합 << '주어진 정수가 바이너리 파일에 성공적으로 기록되었습니다.' << 성병 :: 끝 ;
반품 0 ;
}
구체적인 세부 정보가 포함된 코드 분석은 다음과 같습니다.
'#include
다음 줄은 'int number[] = {42, 99, -1, 0};'입니다. 정수 42, 99, -1 및 0을 사용하여 'numbers'라는 배열을 정의합니다. 'outFile.write(reinterpret_cast
결론
C++로 바이너리 파일을 작성하는 것은 다양한 유형의 데이터를 효율적으로 처리하는 데 중요한 기술입니다. C++로 바이너리 파일을 작성하는 이번 탐구에서 우리는 'ofstream' 클래스를 사용하여 바이너리 데이터를 효율적으로 처리하는 방법을 배웠습니다. 간단한 정수를 처리하든 사용자 정의 구조를 사용하여 구조화된 데이터를 처리하든 프로세스에는 파일 스트림 열기, 이진 형식으로 데이터 쓰기, 파일 닫기가 포함됩니다. 이 기능은 C++ 개발자에게 다양한 범위의 이진 데이터 유형으로 작업할 수 있는 유연성을 제공하여 시스템 수준 프로그래밍에서 멀티미디어 처리에 이르는 응용 프로그램에서 언어의 다양성에 기여합니다.