본문 바로가기
{Programing}/C.C++

c/c++ 파일 입출력

by 탱타로케이 2020. 1. 17.

c style

기본 헤더  stdio.h에 포함.

FILE 구조체를 기준으로 사용되며

 

fopen - fclose 함수 쌍 사이에서 모든 입출력이 이루어진다.

 

FILE* fopen(const char*, const char*);

파일명과 모드를 인자값으로 주어 열고 싶은 파일을 포인터에 지정한다.

 

파일 명을 입력할때, 경로를 같이 준다면 \는 2번씩 써야 서식문자로 인식되어 처리된다.

 

모드 

r : 읽기 모드. 파일이 존재하지 않으면 에러

w : 쓰기 모드. 파일이 존재하지 않으면 생성, 존재하면 덮어쓰기.

a : 추가 쓰기 모드. w 모드와 같으나, 파일이 존재하면 이어쓰기를 한다.

 

int fclose(FILE* fp);

열린 파일을 닫는 함수.

닫히면 0, 에러시 -1

 

FILE * 는 읽는 그대로 파일 포인터라고 하며, 

파일 입출력시 데이터를 읽는 기준이 된다.

 

입출력 함수.

각각 파일에서 읽어오는 함수. 파일에 쓰는 함수이다.

fscanf : 파일포인터, 서식, 변수1 주소, 변수2 주소... :

파일에서 읽어오는 함수, 공백,탭,개행문자, "  ,  "(콤마) 기준으로 변수 구분해서 읽어오는 함수. 서식에 * 가 작성되어있으면 해당 서식에 해당하는 값은 읽지 않는다.

 

fprintf : 파일포인터, 서식, 변수1, 변수2... :

파일에 쓰는 함수, 문자열 출력함수인 printf 와 다른점은 파일포인터를 추가한다는 점.

 

fgets : 문자열 버퍼, 버퍼크기, 파일포인터

: 파일에서 읽어오는 함수.  파일에서 버퍼 크기만큼 or 개행문자 전까지 읽어옴.

fputs : 문자열, 파일 포인터

: 파일에 쓰는 함수.

 

 

각 함수들은 eof (end of file)을 만나면 실행이 종료된다.

파일들은 항상 end of file을 가지고 있다. 

 

c++ style

 

fstream 헤더에 포함.

 

읽기용 클래스와 쓰기용 클래스가 구분되어있다.

 

공통 함수. 

open : 파일 여는 함수. 인자값으로 파일경로및 이름, 입출력 모드.

 

close : 파일 닫는 함수.

 

is_open : 파일이 열렸는지 확인하는 함수.

 

 

입출력 모드 ios_base::

in : 읽기 모드

out : 쓰기 모드

binary : 바이너리 파일 모드

app : 쓰기모드, 항상 파일 끝에 쓰기.

ate : 열면서 파일포인터를 파일 끝으로 이동.

trunc : 파일이 이미 존재하면, 기존 파일 삭제후 재생성.

nocreate : 파일 존재여부만 판단. 존재하지 않으면 에러.

noreplace : 파일 존재하면 에러.

 

바이너리 파일 모드 : 기본적으로 파일입출력은 텍스트모드(아스키코드)로 저장된다. 무조건 이진수로 데이터를 저장하기위한 모드. 보통 이기종간 이동이 필요한 파일은 텍스트 모드로, 필요없는 파일은 바이너리 모드로 작성해도 된다.

텍스트 모드의 경우 개행문자가 운영체제에 따라 자동 변환 되지만, 바이너리는 되지 않는다.  그래서 기종별로 따로 만들어야하는 경우가 생기기 때문에 이식성을 고려하면 텍스트 모드를 권장한다.

 

 

읽기용.

ifstream

eof : 파일의 끝을 찾는 함수. 끝이면 true, 아니면 false 

getline : 파일의 개행문자 기준으로 데이터를 읽어오는 함수. 인자값으로는 문자열 버퍼, 버퍼 길이.

기본적으로 string 클래스는 인자로 못씀. 

그러나 std::getline 함수는 가능.

get : 파일에서 문자 한개씩 읽어오는 함수.

 

 

쓰기용

ofstream

write : 문자열 버퍼, 버퍼 길이. 배열에 작성된 문자열은 끝에 널문자가 들어가니 길이-1을 작성.

왠만하면 string 클래스쓰자.

 

'{Programing} > C.C++' 카테고리의 다른 글

c/c++ 상속(2)  (0) 2020.01.21
c/c++ 상속(1)  (0) 2020.01.21
c/c++ 문자열  (0) 2020.01.14
c/c++ 템플릿  (0) 2020.01.13
c/c++ enum, preprocesser  (0) 2020.01.06

댓글