※요약
fopen : 파일에 대한 입력 및 출력을 합니다.
fclose : fopen함수로 개방한 파일을 닫습니다.
※함수 원형 및 설명
FILE *fopen( const char *filename, const char *mode ); //filename : 개방할 파일의 경로 및 파일명 //mode : 파일 접근 권한(읽기 전용, 쓰기 전용 등 아래 표 참고) //반환값 : 개방된 파일의 FILE 구조체 포인터, 실패시 NULL포인터 int fclose( FILE *stream ); //stream : 개방된 FILE 구조체의 포인터 //반환값 : 성공 시 0, 실패 시 -1(EOF)
※모드 설명
모드 |
설명 |
r |
읽기만 가능하며 파일이 존재해야 한다. 존재하지 않을 경우 에러가 리턴된다. |
w |
쓰기만 가능하며 파일을 생성한다. 파일이 존재하면 그 파일을 지우고 생성한다. |
a |
파일 끝에 추가만 가능하며 파일이 존재하지 않으면 파일을 새로 생성한다. |
r+ |
읽기, 쓰기 모두 가능하며 파일이 존재해야 한다. 존재하지 않을 경우 에러가 리턴된다. |
w+ |
읽기, 쓰기 모두 가능하며 파일을 생성한다. 파일이 존재하면 그 파일을 지우고 생성한다. |
a+ |
파일을 읽어서 파일 끝에 추가만 가능하다. 파일이 존재하지 않으면 파일을 새로 생성한다. |
t |
파일을 text 모드로 개방한다. 입력 시, CF/LF를 “\n”으로 자동 변환하고 출력 시에는 “\n”을 CF/LF로 자동 변환한다. t나 b 생략시 텍스트 모드로 개방된다. |
b |
파일을 이진(binary) 모드로 개방한다. 개행 문자 “\n”을 변환없이 그대로 읽고 쓴다. |
파일 개방 시 기본 모드는 텍스트 모드인 t모드입니다.
고로 r은 rt와 같고 r+는 r+t와 같습니다.
※모드 조합
모드 |
읽기 |
쓰기 |
추가 |
텍스트 모드 |
r / rt |
w / wt |
a / at |
텍스트 갱신 모드 |
r+ / r+t |
w+ / w+t |
a+ / a+t |
이진 모드 |
rb |
wb |
ab |
이진 갱신 모드 |
r+b |
w+b |
a+b |
※모드표
모드 |
읽기 |
쓰기 |
갱신 |
파일 없을 시 파일 생성 |
파일 존재 시 삭제 여부 |
fseek함수 사용 여부 |
r |
O |
X |
X |
X |
X |
O |
r+ |
O |
O |
O |
X |
X |
O |
w |
X |
O |
O |
O |
O |
O |
w+ |
O |
O |
O |
O |
O |
O |
a |
X |
O(*) |
X |
O |
X |
X(*) |
a+ |
O |
O(*) |
X |
O |
X |
O |
모드 a, a+는 현재의 FILE 포인터 위치에 관계없이 항상 파일 끝에 씁니다.
그러므로 fseek함수로 FILE 포인터 위치를 바꿔도 소용이 없으며, a+모드일 때 읽을 위치만을 설정합니다.
기존 파일을 삭제하지 않고 수정하려면 r+모드로 하면 됩니다.
※예제
#include <stdio.h> int main( ) { FILE *pFile = NULL; pFile = fopen( "d:\\text.txt", "w+t" ); if( pFile != NULL ) { fputs( "테스트 입니다.", pFile ); fclose( pFile ); } else { //에러 처리 } return 0; }
'C > 파일, 디렉토리 함수' 카테고리의 다른 글
[C언어] 바이트 단위 파일 읽기 - fread (0) | 2013.12.03 |
---|---|
[C언어] 문자 단위 파일 쓰기 함수 - fputc (0) | 2013.12.02 |
[C언어] 문자 단위 파일 읽기 함수 - fgetc (0) | 2013.12.02 |
[C언어] 변수 단위 파일 쓰기 함수 - fprintf (0) | 2013.11.30 |
[C언어] 변수 단위 파일 읽기 함수 - fscanf (7) | 2013.11.30 |
[C언어] 라인 단위 파일 쓰기 함수 - fputs (0) | 2013.11.27 |
[C언어] 라인 단위 파일 읽기 함수 - fgets (4) | 2013.11.27 |