17강 파일처리함수(1) 강 의 내 용 1 2 3 4 파일 입출력의 개념 파일포인터를 이용한 입출력 파일 입출력 과정 강 의 내 용 1 파일 입출력의 개념 2 파일포인터를 이용한 입출력 3 파일 입출력 과정 4 순차파일 처리
파일 입출력의 개념 디스크의 파일에 대한 자료의 입력과 출력 파일처리함수를 사용하여 파일 입출력 수행 파일 입력 파일 출력 디스크 상의 특정 위치(파일)에 수록되어 있는 자료를 읽어 들여 기억공간에 수록하는 절차 파일 출력 기억공간에 있는 자료를 디스크 상의 특정 위치(파일)에 수록하는 절차 파일처리함수를 사용하여 파일 입출력 수행
파일 입출력의 개념 스트림(stream) 자료의 입출력을 위한 논리적인 통로 시 스 템 외부장치 (디스크) 프로그램 스트림(출력) 스트림(입력)
파일포인터를 이용한 파일 입출력 파일 포인터 파일처리를 위해서는 파일 포인터를 사용 - 파일이 어디에 있는지를 가리키는 포인터 - 모든 파일 입출력 함수는 파일 포인터를 사용
파일포인터를 이용한 파일 입출력 파일 입출력의 수행과정 2) 입출력을 수행한다. 3) 파일을 닫는다. 스트림(stream) 파일과 자료를 주고받을 수 있는 스트림을 생성(fopen()함수 사용) 1) 파일을 연다. 2) 입출력을 수행한다. 3) 파일을 닫는다. 생성된 스트림을 소멸시키기 위한 과정(fclose()함수 사용) 스트림(stream) - 파일과 프로그램과의 통로(논리적인 접속) - 파일포인터를 이용
파일포인터를 이용한 파일 입출력 파일 입출력 프로그램 구조 FILE *fp; fp=fopen(“파일명”, “모드”); 파일포인터 선언 파일 열기 <읽기 쓰기> 파일 닫기 FILE *fp; fp=fopen(“파일명”, “모드”); <입출력 수행> fclose(fp);
파일 입출력 프로그램의 구조 예 #include <stdio.h> void main() { char ch; ABCDEFGHIJKLMNOPQRSTUVWXYZ #include <stdio.h> void main() { char ch; FILE *fp; fp=fopen("sample.dat","w"); for(ch='A'; ch<='Z'; ch++) fputc(ch, fp); fclose(fp); } 파일 포인터 선언 파일 open 자료 출력 파일처리함수 파일 close
파일처리함수와 기능 함 수 기 능 fopen (“파일명”, “모드”) 파일을 지정된 모드로 열기 fclose() 파일을 닫기 함 수 기 능 fopen (“파일명”, “모드”) 파일을 지정된 모드로 열기 fclose() 파일을 닫기 fgetc(), getc() 파일로부터 한 문자 읽기 fputc(), putc() 파일에 한 문자 쓰기 fgets() 파일로부터 문자열 읽기 fputs() 파일에 문자열 쓰기 fscanf(fp) 파일로부터 정해진 형식에 따라 읽기 fprintf() 파일에 정해진 형식에 따라 쓰기 fread() 파일로부터 정해진 크기의 자료를 정해진 개수만큼 읽기 fwrite() 파일에 정해진 크기의 자료를 정해진 개수만큼 쓰기 fseek() 파일에서 입출력 위치를 이동 feof() 파일의 끝인가를 판별 ferror() 파일의 입출력 시 에러 발생 유무 조사
파일 포인터 선언 사용 예 : FILE *fp; 기능 : 파일형 포인터변수를 선언 파일 입출력을 위해서는 맨 처음 파일 포인터를 선언해야 한다. 이 파일 포인터는 실제 파일과 프로그램을 연결해 주는 통로가 된다. 형식 : FILE *변수명; 사용 예 : FILE *fp; 기능 : 파일형 포인터변수를 선언
파일포인터 변수와 버퍼의 관계 FILE *fa , *fb ; fa 프로그램 (fopen()함수에 의해 실제 파일 과 연결됨) 스트림(stream) (fopen()함수에 의해 실제 파일 과 연결됨) 버퍼 fa fb 프로그램
파일 열기 형식 : fopen("파일명", "사용모드"); 사용 예 : fp=fopen("test.dat", "r"); 기능 : 파일을 열어 사용할 수 있게 함 fopen() 함수 - 지정된 파일의 파일포인터에 시작주소 값을 리턴 - 파일이 개방되지 않을 때는 NULL값을 리턴
파일열기에서의 사용모드 자료의 입출력방식을 의미하며, 개방한 파일의 용도를 결정짓는다. 텍스트 모드(text mode) - ASCII 문자들로 구성된 파일(원시 프로그램) - 문자 변환이 필요( \n↔ CR/LF ) 2진 모드(binary mode) - 원시프로그램을 컴파일하여 만들어진 파일 - 문자 변환이 불필요
파일열기에서의 사용모드 사용모드 의 미 파일이 있을 경우 파일이 없을 경우 “r”, “rb” 파일 읽기 정상 처리 의 미 파일이 있을 경우 파일이 없을 경우 “r”, “rb” 파일 읽기 정상 처리 NULL값 반환 “r+”, “rb+” 파일 읽기, 쓰기 겸용 “w”, “wb” 파일 쓰기 이전 내용 삭제 새 파일 생성 “w+”, “wb+” “a”, “ab” 파일 추가 이전 내용 뒤에 추가 “a+”, “ab+” 파일 읽기, 추가 겸용
파일열기에서의 사용모드 사용 예 fopen("파일명", "r") ; →텍스트 모드 입력 개방 fopen("파일명", "w") ; →텍스트 모드 출력 개방 fopen("파일명", "r") ; →텍스트 모드 입력 개방 fopen("파일명", "wb") ; →2진 모드 출력 개방 fopen("파일명", "rb") ; →2진 모드 입력 개방
파일 열기 예 void main(){ FILE *fp1, *fp2; fp1=fopen("a:\text.txt","w"); fp2=fopen("c:\source\test.c", "r"); } 파일 Open이 안될 경우를 고려해서 강제로 종료시켜야 함 if((fp=fopen("파일명", "사용모드") )==NULL) { fputs("파일을 열수 없음!"); exit(1); } 프로그램을 종료할 경우 사용하는 함수
파일 닫기 형식 : fclose(파일 포인터 변수); 사용 예 : : fclose(fp); - 개방된 통로와 버퍼를 원 상태로 환원 - 쓰기의 경우 파일 끝에 EOF( End Of File ) 신호를 부가
파일 열기와 닫기 예 void main() { FILE *fp1, *fp2; fp1=fopen("a:\text.txt", "w"); fp2=fopen("c:\source\test.c", "r"); ... fclose(fp1); fclose(fp2); } A드라이버 밑에 text.txt파일을 쓰기용으로 개 방하고 시작주소를 파일 포인터 fp1에 넘겨줌 파일 포인터 fp1과 fp2를 선언 C드라이버의 source디렉토리에 있는 test.c 파일을 읽기용으로 개방하고 시작주소를 파일포인터 fp2에 넘겨줌 열었던 파일을 닫고 파일포인터 fp1을 해제 열었던 파일을 닫고 파일포인터 fp2을 해제
순차파일 처리 파일의 종류 순차 파일(Sequencial file) 랜덤 파일(Random file) - 파일의 처음에서부터 자료를 차례로 읽고, 기록하는 파일 - 레코드의 길이가 일정하지 않은 파일 랜덤 파일(Random file) - 파일의 임의의 위치에서 자료를 읽고, 기록하는 파일 - 레코드의 길이가 일정한 파일
순차파일의 레코드 구성 \n (개행문자) 레코드(record) 레코드1 CR/LF 레코드2 레코드3 파일 입출력처리에 사용되는 논리적인 기본단위 각 레코드들은 필드(field)들로 구성 순차파일에서는 일정하지 않은 레코드를 구별해야 함 레코드1 CR/LF 레코드2 레코드3 텍스트 모드일 경우 자동으로 변환 \n (개행문자)