프로그래밍/C/C++

C++ std::ofstream 사용하는 방법

내일 더 성장하고 싶은 개발자 2023. 2. 7. 16:10
반응형

📝

C++에서는 ofstream클래스를 사용하여 파일에 쓸 수 있습니다. 

 

이 ofstream 클래스는 표준 C++ 라이브러리의 일부이며 파일에 쓰기 위한 스트림 기반 인터페이스를 제공합니

이 ofstream클래스는 다음을 포함하여 파일에 데이터를 쓰기 위한 여러 멤버 함수를 제공합니다.

  • open: 쓰기용 파일을 엽니다.
  • write: 데이터 블록을 파일에 씁니다.
  • put: 파일에 단일 문자를 씁니다.
  • operator<<: 데이터 스트림을 파일에 기록합니다.

객체 로 파일을 열고 ofstream 새 데이터를 작성하여 파일의 내용을 업데이트할 수 있습니다.

파일 끝에 ios::app 데이터를 추가하려면 플래그 를 사용하여 파일을 열 수 있습니다 

💡

#include <fstream>
#include <iostream>

int main()
{
    std::ofstream outfile;
    outfile.open("file.txt", std::ios::app);

    outfile << "This is a new line." << std::endl;

    outfile.close();
    return 0;
}

 

이 코드는 추가 모드에서 파일을 열고  file.txt 파일의 끝까지 "This is a new line" 이라는 문자열을 씁니다. 

ofstream 을 사용할 때 아주 재밌는 내용이 있다.

https://stackoverflow.com/questions/56032695/why-does-my-ofstream-write-result-in-more-bytes-than-expected

 

Why does my ofstream write result in more bytes than expected?

Edit 1: I've identified the hex combination that triggers this problem but still can't fix it. See Edit at bottom: Original Post: I'm trying to pass data from a sensor to a binary file. I'm using ...

stackoverflow.com

ofstream.write( buffer, 4096 ) 이라는 코드를 사용하여 4096Byte 만큼의 정보를 특정한 파일에 데이터로써 쓰고 싶었다.

하지만, 파일이 자기 마음대로 버퍼를 잡아서 쓰는 것 같고, 바이너리 용량이 예측한 용량이 아니였다.

 

이유가 뭐냐하면, 

파일을 열 때 Binary 라는 것을 명시 해주지 않으면 해당 Windows 자체적으로 추가적인 내용을 쓰기도한다.

 

위 샘플 코드에서 만약 패킷정보와 같이 고유하고, 바이너리성 정보를 갖는 데이터 라면 다음과 같이 파일을 열어주어야한다.

outfile.open("file.bin", std::ios_base::binary);

open 함수를 사용할 때 위와 같은 바이너리 플래그 정보를 같이 전달해야한다.

그래야, write를 할 때 원하는 크기만큼만 파일에 작성한다.

반응형