일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 인공지능
- 밥먹는 철학자
- 오라클
- springboot
- CI
- sql
- javascript
- CD
- Spring
- Xcode
- 스프링부트
- MySQL
- jenkins
- DBMS
- 다이어리
- AI
- 데이터베이스
- Dining philosopher problem
- swift
- 리눅스
- 아이패드다이어리
- 스프링
- 스프링부트 웹 소켓
- libasm
- IOS
- JPA
- 프로그래밍언어론
- 소켓
- 42seoul
- 네트워크
- Today
- Total
Hi yoahn 개발블로그
파일 입출력 본문
C++ 파일 관련 클래스
<fstream>
ifstream : input file stream
ofstream : output file stream
fstream : file stream
cin, cout도 표준 입출력을 담당하는 객체
istream, ostream -> iostream
1. 출력스트림
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ofstream output;
output.open("scores.txt");
output << "John" << " " << "T" << " " << "Smith" << " " << 90 <<endl;
output << "Eric" << " " << "K" << " " << "Jones" << " " << 85 <<endl;
output.close();
cout<<"Done"<<endl;
return 0;
}
output.open("파일 경로")를 통해 파일 생성하고 객체와 연결
output << ... 으로 파일에 출력
output.close() 로 파일을 닫는다
-> 객체하고 파일의 연결을 끊음
파일을 닫지 않는 경우 데이터 손실이 발생할 수 있다. 적절히 저장되지 못할 수도 있다.
- 파일 생성과 열기를 동시에 할 수 있다.
ofstream output("scores.txt");
# 스트림 조정자
setw() //setwidth
- 파일로 데이터 쓰기
파일이 존재하지 않으면 새로운 파일이 생기고, 파일이 이미 존재한다면 이전 내용은 경고없이 지워지고 덮어쓰게 된다.
2. 입력스트림
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
ifstream input;
input.open("scores.txt");
//ifstream input("scores.txt");
string firstName;
char mi;
string lastName;
int score;
input >> firstName >> mi >> lastName >> score; //데이터 읽기
cout << firstName << " " << mi << " "<< lastName <<" "<<score << endl;
input >> firstName >> mi >> lastName >> score; //데이터 읽기
cout << firstName << " " << mi << " "<< lastName <<" "<<score << endl;
input.close();
cout<<"Done"<<endl;
return 0;
}
데이터를 올바르게 읽기 위해서는 데이터가 어떻게 저장되어 있는지를 알아야 함
파일에 저장된 타입과 읽어들이는 변수 타입이 다르면 코드가 제대로 동작하지 않는다
3. 파일존재 여부 테스트
- 파일을 읽으려고 할 때 파일이 없으면 예측할 수 없는 오류가 발생할 수 있다.
- 파일이 존재하는지 확인
open()함수 호출 즉시 fail() 함수를 호출한다.
input.open("scores.txt");
if(input.fail()){
cout <<"File does not exist" <<endl;
return 0;
}
4. fstream 과 파일 열기 모드
: 프로그램이 한 스트림 객체로 입출력 모두를 할 수 있다.
- 파일 열기 모드
ios::in | 입력을 위한 파일 열기 |
ios::out | 출력을 위한 파일 열기 |
ios::app | 모든 출력을 파일의 끝에 추가 |
ios::ate |
ios::out + 파일이 존재하면 파일의 끝으로 이동. 데이터는 파일의 아무 곳이나 쓰기 가능 (파일 포인터) |
ios::trunc |
파일이 이미 존재하면, 파일의 내용을 버림 (ios::out 에 대한 기본 동작) |
ios::binary | 이진 입출력을 위한 파일 열기 |
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
fstream inout;
inout.open("city.txt",ios::out);//파일 생성,객체와 연결
inout << "Dallas Houston Atlanta ";//쓰기
inout.close();
inout.open("city.txt", ios::out|ios::app);//append모드로 파일 열기/연결
inout << "Savannah Austin Chicago";//파일에 내용 추가
inout.close();
string city;
inout.open("city.txt", ios::in);//읽기 모드로 파일 열기&연결
while(!inout.eof()){ //eof 만날 때까지 읽어들이기
inout >> city;
cout<<city<<" ";
}
inout.close();
return 0;
}
- eof()
:End of File
파일의 끝에는 eof마크가 있다.
파일 포인터가 가리키는 부분이 eof 마크가 아니라면 while 안으로 들어가서
inout >> city;
파일 내용을 하나씩 읽어 모니터에 출력하고 파일포인터는 하나 이동
(공백을 만나기 전까지 하나의 data라고 생각하고 읽음)
- getline()
>> (stream추출 연산자)를 사용하여 데이터 읽기 -> 공백이 있는 문자열을 읽어올 수 없다.
getline() 함수는 공백있는 문자열을 읽어들인다. <string>
구분문자나 eof표시를 만나면 문자읽기를 멈춘다.
getline(ifstream& input, string s, [char delimit character])
첫번째 매개변수는 어떤 파일에서 읽어올지를 나타내고 두번째 변수는 읽어들인 값을 담을 공간, 세번째 매개변수는 구분문자로 한번에 읽어들일 데이터를 구분하는 것
구분문자는 읽어들일 문자열을 구분하기 위한 문자로 저장하지는 않는다. (기본값 '\n')
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C/C++] dangling pointer (0) | 2021.03.18 |
---|---|
NULL, 0, '\0', "" 차이점 (0) | 2021.03.18 |
[C] 가변인자 (0) | 2020.12.30 |