C++ std::ofstream 사용하는 방법
📝
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 을 사용할 때 아주 재밌는 내용이 있다.
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를 할 때 원하는 크기만큼만 파일에 작성한다.