2008 kang s c 2nd edition 13 파일 처리.ppt [호환...

26
13 파일 처리 13 파일 처리 조선대학교 전자공학과 장순석 교수 1

Upload: others

Post on 19-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

  • 13 파일 처리13 파일 처리

    조선대학교 전자공학과 장순석 교수

    1

  • C로 배우는 프로그래밍 기초 2nd Edition

    함수 fopen()함수 fopen()

    파일 열기

    파일을 만들기 위해서는 함수 fopen()을 이용 함수 fopen()의 함수 원형은 다음과 같으며 헤더 파일 stdio.h

    파일에 정의파일에 정의

    함수 fopen()은 두 개의 문자열 전달인자를 이용, 반환 값은포인터 값인 FILE *

    한국대학교 객체지향연구소2

  • C로 배우는 프로그래밍 기초 2nd Edition

    파일 열기파일 열기

    인자함수 fopen()에서 함수 fopen()에서• 첫 번째 문자열은 처리하려는 파일 이름이고, • 두 번째 문자열은 파일 처리 종류(모드)

    FILE *f; char fname[] = "basic.txt";if ((f = fopen(fname, "w")) == NULL) {

    printf( "파일이 열리지 않습니다 \n" );printf( 파일이 열리지 않습니다.\n );};

    …fclose(f);

    조건문 if를 위와 같이 함수 fopen()과 함께 이용하면 파일열기에 실패할 경우 문장 "파일이 열리지 않습니다.\n"을출력

    파일 처리가 모두 끝났으면 파일 포인터 f를 인자로 함수fclose(f)를 호출하여 반드시 파일을 닫도록

    한국대학교 객체지향연구소3

    ( )

  • C로 배우는 프로그래밍 기초 2nd Edition

    파일 처리 모드파일 처리 모드

    파일 처리 모드 종류 의미

    함수 fopen()의 두 번째 인자는 파일 처리 종류(모드) 함수 fopen()의 두 번째 인자는 파일 처리 종류(모드)• “r”, “w”, “a”, “r+”, “w+”, “a+”의 종류

    한국대학교 객체지향연구소4

  • C로 배우는 프로그래밍 기초 2nd Edition

    예제 13-1예제 13 1

    한국대학교 객체지향연구소5

  • C로 배우는 프로그래밍 기초 2nd Edition

    함수 fprint, fscanf함수 fprint, fscanf 파일에 자료를 쓰거나 읽기 위하여 함수 fprintf()와 fscanf()를 이용

    • 이 함수를 이용하기 위해서는 헤더 파일 stdio.h 파일을 포함 함수 fprintf()와 fscanf()의 함수 원형

    int fprintf(FILE *, const char *, ...);int fscanf(FILE * const char * );

    위 함수의 첫 번째 인자는 입출력에 이용될 파일이고, 두 번째 인자는 입출력되는문자열이며, 다음 인자들은 입출력될 변수 목록

    int fscanf(FILE , const char , ...);

    • 함수 원형에서 기호 …은 여러 인자가 계속됨을 의미 함수 fprintf()와 fscanf()를 표준 입출력에도 이용 가능

    • 즉 함수 fprintf()와 fscanf()의 첫 번째 인자에 각각 stdin 또는 stdout를 이용하면 표준입력 표준 출력으로 이용이 가능입력, 표준 출력으로 이용이 가능

    기호 상수 stdin, stdout은 stderr과 함께 헤더 파일 stdio.h에 정의되어 있는값으로 각각 표준입력, 표준출력, 표준에러를 의미

    한국대학교 객체지향연구소6

  • C로 배우는 프로그래밍 기초 2nd Edition

    예제 13-2예제 13 2

    한국대학교 객체지향연구소7

  • C로 배우는 프로그래밍 기초 2nd Edition

    함수 fgets()와 fputs()함수 fgets()와 fputs() 함수 fgets()와 fputs()

    파일에 문자열을 입출력하는 함수로 fgets()와 fputs() 파일에 문자열을 입출력하는 함수로 fgets()와 fputs()• 이 함수도 헤더파일 stdio.h 파일에 다음과 같은 함수원형으로 정의

    함수 fgets()는 문자열을 개행문자(₩n)까지 읽어 개행문자도 함께 입력문자열에 저장문자열에 저장

    마찬가지로 함수 fputs()는 문자열을 그대로 출력

    함수 fgets() 인자 첫 번째 인자는 문자열이 저장될 문자 포인터이고,

    두 번째 인자는 입력할 문자의 최대 수이며,

    세 번째 인자는 입력 문자열이 저장될 파일 세 번째 인자는 입력 문자열이 저장될 파일

    함수 fputs() 인자 첫 번째 인자는 출력될 문자열이 저장된 문자 포인터이고,

    두 번째 인자는 문자열이 출력되는 파일

    char * fgets(char *, int, FILE *);int fputs(char *, FILE *);

    한국대학교 객체지향연구소8

    int fputs(char , FILE );

  • C로 배우는 프로그래밍 기초 2nd Edition

    함수 fgetc()와 fputc()함수 fgetc()와 fputc() 문자 하나를 파일에 입출력하는 함수로 fgetc()와 fputc()를 제공

    • 이 함수의 원형은 헤더파일 stdio.h에 정의

    이 함수들은 문자 하나의 입출력의 대상인 파일 포인터를 인자로 이용

    int fgetc(FILE *);int fputc(int, FILE *);

    이 함수와 같은 함수로 getc()와 putc()도 이용 가능

    p ( , );

    int getc(FILE *);

    문자의 표준 입출력에 이용되는 getchar()와 putchar()는 다음과 같이함수 t ()와 t ()를 이용한 매크로

    int getc(FILE );int putc(int, FILE *);

    함수 getc()와 putc()를 이용한 매크로

    #define getchar() getc(stdin)#define putchar(_c) putc((_c),stdout)

    함수 fgetc()와 fputc()는 getc()와 putc()와 그 기능은 동일하며, fgetc()와 fputc()는 함수이고, getc()와 putc()는 매크로

    한국대학교 객체지향연구소9

  • C로 배우는 프로그래밍 기초 2nd Edition

    함수 feof()와 ferror()함수 feof()와 ferror() 함수 feof()

    파일의 내부 포인터 위치가 파일의 끝(EOF)인지를 검사하는데 필요한 함수( )• 이 함수는 헤더파일 stdio.h에 다음 함수 원형으로 정의

    파일의 위치가 파일의 마지막( d f fil )인지를 검사하여 파일의 마지막이면

    int feof(FILE *);

    파일의 위치가 파일의 마지막(end of file)인지를 검사하여, 파일의 마지막이면0이 아닌 값을, 파일의 마지막이 아니면 0을 반환• 그러므로 표준입력에서 계속적으로 입력을 받는 구문으로 다음을 이용 가능

    함수 fe o ()

    while (!feof(stdin)) {…

    }

    함수 ferror() 파일 처리에서 오류가 발생했는지 검사하는 함수

    • 함수의 원형은 헤더파일 stdio.h에 정의

    이전 파일 처리에서 오류가 발생하면 0이 아닌 값을 발생하고, 오류가 발생하지않으면 0을 반환

    int ferror(FILE *);

    한국대학교 객체지향연구소10

  • C로 배우는 프로그래밍 기초 2nd Edition

    예제 13-3예제 13 3

    한국대학교 객체지향연구소11

  • C로 배우는 프로그래밍 기초 2nd Edition

    예제 13-4예제 13 4 목적

    “list list filename”을 입력• 파일 filename의

    내용을내용표준출력으로출력하는 프로그램

    조건

    명령어 줄 인자를활용, 두 번째인자가 파일이름에해당

    파일 내용의 출력은한 줄마다 맨 앞에 줄번호를 출력

    한국대학교 객체지향연구소12

  • C로 배우는 프로그래밍 기초 2nd Edition

    텍스트 파일과 이진 파일텍스트 파일과 이진 파일

    텍스트 파일 텍스트 파일은 텍스트 편집기(에디터)로 그 내용을 알 수 있으며, ( ) ,

    • 그 내용을 확인할 수 있을 뿐만 아니라 인쇄가 가능• 함수 fprintf()와 fscanf()는 자료의 입출력을 텍스트 모드로 처리

    함수 fprintf()를 이용하여 정수형 변수 cnt에 저장된 값을 파일 f에출력하는 과정

    이진 파일 이진 파일 텍스트 파일과는 다르게 이진(binary) 파일은 C 언어의 자료형을 모두

    유지하면서 바이트 단위로 저장하는 파일 이진 파일의 대표적인 예가 실행파일, 이러한 이진 파일은 일반 편집기로는

    그 내용 확인 불가능

    한국대학교 객체지향연구소13

    그 내용 확인 불가능

  • C로 배우는 프로그래밍 기초 2nd Edition

    함수 fwrite와 fread함수 fwrite와 fread 이진 파일 처리

    이진(binary) 모드로 입출력을 처리하려면 함수 fwrite()와 fread()를( y) () ()이용• 함수 fwrite()는 헤더파일 stdio.h에 다음과 같은 함수원형으로 정의

    size t fwrite(const void *, size t, size t, FILE *);

    이진 파일에 저장되어 있는 자료형을 입력하는 함수 fread()• 각각의 인자는 출력 함수 fwrite()와 동일

    s e_ e(co s o d , s e_ , s e_ , );size_t fread(void *, size_t, size_t, FILE *);

    • 각각의 인자는 출력 함수 fwrite()와 동일 인자와 반환 값

    인자• 첫 번째 인자는 출력될 자료의 주소 값이며첫 번째 인자는 출력될 자료의 주소 값이며,• 두 번째 인자는 출력될 자료의 바이트 크기이고,• 세 번째 인자는 출력될 단위 자료의 묶음 개수이고,• 마지막 인자는 출력될 파일 포인터

    반환값 값은 파일에 출력된 단위 자료형의 개수 위에서 첫 번째 인자의 자료형이 void *로 모든 자료형의 포인터를

    대신할 수 있는 포인터 변수

    한국대학교 객체지향연구소14

  • C로 배우는 프로그래밍 기초 2nd Edition

    이진 파일 입출력 이해이진 파일 입출력 이해

    함수 fwrite()를 이용하여 정수형 변수 cnt 값을 파일 f에출력하는 과정출력하는 과정

    함수 fwrite()는 바이트 단위로 원하는 블록을 파일에 출력하기위한 함수

    함수 fwrite()에 의하여 출력된 자료는 함수 fread()를 이용하여입력해야 그 자료유형 유지가 가능

    한국대학교 객체지향연구소15

  • C로 배우는 프로그래밍 기초 2nd Edition

    이진 파일 열기 모드이진 파일 열기 모드

    문자 b 추가 이진파일을위한파일열기모드에서문자 ‘b’를추가 이진파일을위한파일열기모드에서문자 b를추가

    • 이진(binary)을의미하는 b는모든파일열기모드에이용• 파일열기모드에서 ‘b’가없으면기본적으로텍스트파일을의미

    FILE *f = fopen(fname, "wb");

    한국대학교 객체지향연구소16

  • C로 배우는 프로그래밍 기초 2nd Edition

    예제 13-5예제 13 5

    한국대학교 객체지향연구소17

  • C로 배우는 프로그래밍 기초 2nd Edition

    파일 내부 위치파일 내부 위치

    파일 위치 포인터 파일을 열면 항상 파일 위치 포인터(file pointer)라는 것이 파일의 한

    장소를 가리킴 파일 내부를 바이트 단위로 파일 내부 위치를 나타내는 값

    • 파일 포인터가 100L이라면 파일의 처음에서부터 100바이트 떨어진 위치에현재 파일 포인터가 위치현재 파일 포인터가 위치

    • 파일 포인터 값은 일반적으로 자료형 long으로 취급하므로 상수를 기술할때 100L처럼 수 뒤에 L을 기술 가능

    • 파일 포인터는 파일 내부에서 자료를 읽거나 쓰는 만큼 파일의 현재위치에서 뒤로 이동위치에서 뒤로 이동

    순차적, 임의 접근• 파일에서 원하는 장소로 자유롭게 이동하는 것을 임의 접근(Random Access)• 파일의 임의 접근을 처리하기 위해서는 파일 포인터를 자유 자재로파일의 임의 접근을 처리하기 위해서는 파일 포인터를 자유 자재로

    이동하는 함수 fseek()이 필요

    한국대학교 객체지향연구소18

  • C로 배우는 프로그래밍 기초 2nd Edition

    함수 fseek()함수 fseek() fseek()

    함수 fseek()는 함수 원형이 헤더파일 stdio h 파일에 정의함수 fseek()는 함수 원형이 헤더파일 stdio.h 파일에 정의

    함수 fseek()는 파일 fptr에서 기준점 mode에서 offset만큼 떨어진곳으로 파일 포인터를 위치하는 함수

    offset offset

    함수 fseek()에서 두 번째 인자는 long 유형으로 기준점으로부터떨어진 값을 말하며 흔히 오프셋(offset)이라 함

    함수 fseek()에서 세 번째 인자는 정수형 기호 상수로 다음 세 가지중의 하나를 이용

    int fseek(FILE *fptr long offset int mode)int fseek(FILE fptr, long offset, int mode)

    한국대학교 객체지향연구소19

  • C로 배우는 프로그래밍 기초 2nd Edition

    기준 세가지기준 세가지

    함수 fseek(f, 100L, SEEK_SET)의 호출• 파일의 처음 위치에서 100바이트 떨어진 위치로 이동

    함수 fseek(f, 100L, SEEK_CUR)의 호출• 파일의 현재 위치에서 100바이트 떨어진 위치로 이동

    함수 fseek(f, -100L, SEEK_END)의 호출• 파일 끝 위치에서 앞으로 100바이트 떨어진 위치로 이동

    한국대학교 객체지향연구소20

  • C로 배우는 프로그래밍 기초 2nd Edition

    파일 관련 여러 함수파일 관련 여러 함수

    함수 fseek()에서 두 번째 인자는 세 번째 인자인기준점으로부터 떨어진 값을 말하며 양수는 뒤 음수는 앞으로기준점으로부터 떨어진 값을 말하며, 양수는 뒤, 음수는 앞으로방향을 지시

    파일 포인터와 관련된 함수로서 다음 세 가지 함수를 이용

    함수 ftell()은 인자인 파일의 파일 포인터를 반환하며

    함수 rewind()는 파일 포인터를 무조건 제일 앞으로 이동

    한국대학교 객체지향연구소21

  • C로 배우는 프로그래밍 기초 2nd Edition

    예제 13-7예제 13 7 appendscore.c

    바로 이전에 작성한바로 이전에 작성한readscorefile.c 프로그램을 발전시켜 더많은 학생의 성적정보를많은 학생의 성적정 를추가하는 프로그램을 작성

    프로그램이 실행되면 제일먼저 파일 score.bin 먼저 파일 score.bin 파일에 있는 학생 정보를모두 읽어와 출력

    파일에 있는 마지막 학생파일에 있는 마지막 학생정보로부터 마지막 학생번호를 알아냄

    • 이 번호에 1씩이 번호에 1씩증가시키면서 다음에추가될 학생의 번호로이용

    한국대학교 객체지향연구소22

  • C로 배우는 프로그래밍 기초 2nd Edition

    입출력 함수입출력 함수

    여러 입출력 함수

    한국대학교 객체지향연구소23

  • C로 배우는 프로그래밍 기초 2nd Edition

    파일 삭제, 이름 바꾸기파일 삭제, 이름 바꾸기 함수 remove()

    지정된 특정한 파일을 삭제하고 지정된 특정한 파일을 삭제하고

    함수 remove()는 remove(“sample.txt”)와 같이 문자열로지정된 파일을 삭제

    함수 rename() 지정된 파일의 이름을 새로운 이름으로 바꾸는 역할을 수행

    함수 ()은 (“ ld t t” 함수 rename()은 rename(“oldname.txt”, “newname.txt”)과 같이 앞의 파일이름을 뒤 파일이름으로바꾸는 역할

    함수 remove()와 rename()도 헤더 파일 stdio.h에 그 함수원형이 정의

    한국대학교 객체지향연구소24

  • C로 배우는 프로그래밍 기초 2nd Edition

    예제 13-8예제 13 8

    한국대학교 객체지향연구소25

  • C로 배우는 프로그래밍 기초 2nd Edition

    26