컴공생의 다이어리

[c++] 파일에 쓰기 본문

Development/C & C++

[c++] 파일에 쓰기

컴공 K 2021. 1. 3. 19:29

아래 코드를 통해 'test.txt'라는 파일에 "파일에 쓰기!"라는 문자를 저장할 수 있다.

#include <iostream>
#include <fstream>
#include <string>

int main() {
	// 파일 쓰기 준비
	std::ofstream out("test.txt");
	std::string s;
	if (out.is_open()) {
		out << "파일에 쓰기!";
	}
	return 0;
}

만일 'test.txt'가 존재하지 않을 경우, 'test.txt'를 생성한 뒤에, 생성이 성공했다면 출력하게 된다. ofstream은 열리는 파일이 존재하지 않으면 해당 파일을 생성하고 열게 된다. 만일, 해당 파일이 이미 존재한다면, 특별한 설정을 하지 않는다면 해당 파일 내용이 다 지워지고 새로운 내용으로 덮어 씌우게 된다.

 

 

파일에 덧붙이기

#include <iostream>
#include <fstream>
#include <string>

int main() {
	// 파일 쓰기 준비
	std::ofstream out("test.txt",std::ios::app);
	std::string s;
	if (out.is_open()) {
		out << "덧붙여봄!";
	}
	return 0;
}

out 객체를 생성할 때 옵션으로 app을 주게 되면, 파일에 스트림을 연결할 때 기존 파일의 내용을 지우고 새로 쓰는 것이 아니라 기존의 파일 뒤에 새로운 내용을 붙여 쓰게 된다. 따라서 위 코드를 실행한 뒤 'test.txt'라는 파일을 열어보면 "파일에 쓰기!덧붙여봄!"이 저장되어 있다.

 

app 옵션 이외에도 아래와 같은 다른 옵션들이 있다.

  • ios::ate : 자동으로 파일 끝에서 부터 읽기와 쓰기를 실시한다. (즉 파일을 열 때 위치 지정자가 파일 끝을 가리키고 있다.)
  • ios::trunc : 파일 스트림을 열면 기존에 있던 내용들이 모두 지워진다. 기본적으로 ofstream 객체를 생성할 때 이와 같은 설정으로 만들어진다.
  • ios::in, std::ios::out : 파일에 입력을 할 지 출력을 할 지 지정하며, ifstream과 ofstream 객체를 생성할 때 각각은 이미 설정되어 있다.

ios::ate와 ios::app은 비슷해 보이지만 차이가 있다. ios::app의 경우 원본 파일의 내용을 무조건 적으로 보장하지만, ate는 위치 지정자를 그 이전으로 옮길 수 있따. 즉 app의 경우 파일 위치 지정자가 기존 파일의 끝이 시작점이라 생각하여 움직이며 ate의 경우 기존 파일을 포함해서 움직인다.

 

 

 

modoocode.com/312

 

씹어먹는 C++ 강좌 - PDF 파일

 

modoocode.com

 

728x90
반응형
Comments