컴공생의 다이어리

[c++] 파일 입출력 본문

Development/C & C++

[c++] 파일 입출력

컴공 K 2021. 1. 3. 03:16

fstream

파일 스트림은 기본적인 istream이나 ostream 클래스 보다 더 지원하는 기능이 더 많기 때문에 이를 상속 받아서 작성되었으며, 각각을 상속 받은 것이 ifstream과 ofstream이다. 이들 클래스를 모두 포함하는 라이브러리로 fstream을 사용하면 된다.

 

#include <fstream>
#include <iostream>
#include <string>
int main() {
	// 파일 읽기 준비
	std::ifstream in("test.txt");
	std::string s;
	if (in.is_open()) {
		in >> s;
		std::cout << "입력 받은 문자열 :: " << s << std::endl;
	}
	else {
		std::cout << "파일을 찾을 수 없습니다!" << std::endl;
	}
	return 0;
}

 

 

ifstream 객체에 생성자에 연동하고자 하는 파일의 경로를 아래와 같이 전달하면 된다.

//상대경로
std::ifstream in1("test.txt");

//절대경로
std::ifstream in2("C:\\a\\b\\test.txt");

 

위와 같이 생성자에 파일 경로를 지정하면, 해당하는 파일을 찾고 열게 된다. 만일 파일이 존재하지 않는다면 파일을 열 수 없다. 따라서 파일이 열렸는지의 유무는 아래와 같이 is_open함수를 사용하면 된다. 만일 해당 경로에 있는 파일이 존재한다면 true를 존재하지 않는다면 false를 리턴한다.

if(in.is_open){

 

마지막으로 마치 cin을 사용하는 것처럼 아래와 같은 방법으로 in 객체를 이용해서 파일로부터 데이터를 읽을 수 있다.

in>>s;

 

c언어에서는 파일 입출력을 한 후에 꼭 fclose를 해주어야 했다. 그런데 c++에서는 그러한 작업을 꼭 하지 않아도 된다. 왜냐하면, 이미 ifstream 객체의 소멸자에서 자동적으로 close를 해주기 때문이다. 다만 close를 직접 해야 하는 경우도 있다. 아래의 코드가 그 예시이다.

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

int main() {
	// 파일 읽기 준비
	std::ifstream in("test.txt");
	std::string s;
	if (in.is_open()) {
		in >> s;
		std::cout << "입력 받은 문자열 :: " << s << std::endl;
	}
	else {
		std::cout << "파일을 찾을 수 없습니다!" << std::endl;
	}
	in.close();
	in.open("other.txt");
	if (in.is_open()) {
		in >> s;
		std::cout << "입력 받은 문자열 :: " << s << std::endl;
	}
	else {
		std::cout << "파일을 찾을 수 없습니다!" << std::endl;
	}
	return 0;
}

 

아래처럼 새로운 파일에서 같은 객체가 입력을 받기 위해서는 기존 파일 스트림과의 연결을 종료하고, 새로운 파일과 연결을 시켜주면 된다.

in.close();
in.open("other.txt");

기존 파일과의 스트림 종료는 close함수가, 새로운 파일과의 연결은 open함수가 수행하고 있다. open함수가 있기에 굳이 ifstream 객체 생성자에서 파일 경로를 바로 지정해줄 필요가 없고, 나중에 open으로 원하는 파일을 열어도 상관없다.

 

 

modoocode.com/312

 

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

 

modoocode.com

 

728x90
반응형

'Development > C & C++' 카테고리의 다른 글

[c++] 파일에 쓰기  (0) 2021.01.03
[c++] 파일 전체 읽기  (0) 2021.01.03
[c++] 형식 플래그(format flag)와 조작자(Manipulator)  (0) 2021.01.03
[c++] cin (입력 받기)  (0) 2021.01.02
[c++] string 관련 함수  (0) 2020.12.27
Comments