20
13장 파일 처리

제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

제13장 파일 처리

Page 2: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

파일 열기: File Open◦ FILE *fp;◦ fp=fopen(“filename”, “r”);◦ File handling mode: r, w, a, rb, wb, ab, r+, w+, a+◦ fclose(fp)

파일의 종류: Text File, Binary File◦ Text file: .txt, .doc, .hwp…◦ Binary

file: .exe, .jpg, .gif, .mov, .mpeg, .tif, .pgm, .ppm …. 파일 읽기/쓰기: Read/Write a file◦ fscanf, fgetc, getc, fprintf, fputc, putc, fgets, fputs:

for text file◦ fgetc, getc, fputc, putc, fwrite: for binary file

한밭대 정보통신공학과 и чунг хо 2

Page 3: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

파일 열기: fopen() 함수를 사용한다. 형태: File *fopen(const char filename*, const char *mode);Ex.)FILE *fp=fopen(“test.txt”, “w”); //파일을 쓰기 모드로 연다.모드는 r:read 읽기, w: write 쓰기, a:append 첨가형태가 있다.

한밭대 정보통신공학과 и чунг хо 3

Page 4: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

파일을 fcolse()를 이용하여 닫지 않고 계속 사용하려고 할 때 모드는◦ “r+”: 읽은 후 쓰기, ◦ “w+”:쓴 후 읽기, ◦ “a+”: 추가 후 읽기 또는 쓰기, 이 경우 쓰기는 파일 끝에만 가능

한밭대정보통신공학과 и чунг хо 4

Page 5: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

파일 출력 함수 fprintf : printf의 파일출력 버전int fprintf(FILE *, const char *, …)예) FILE *fp=fopenf(“test.txt”, “w”);fprintf(fp, “%s %d”, “홍길동”, 99);

파일 입력 함수 fscanf : scanf의 파일입력 버전int fscanf(FILE *, const char *, …)예) char name[20]; int score;

FILE *fp=fopenf(“test.txt”, “r”);fscanf(fp, “%s %d”,name, score);

한밭대 정보통신공학과 и чунг хо 5

Page 6: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

파일 출력 함수 fprintf 가 printf함수와 동일할 때FILE pointer 대신 stdout 또는 stderr을 쓸 때예) fprintf(stdout, “%s %d”, “홍길동”, 99);

fprintf(stderr, “%s %d”, “홍길동”, 99);stdout, stderr은 stdio.h에 정의된 표준출력, 표

준에러로 모니터 화면에 출력됨을 의미. 파일 입력 함수 fscanf가 scanf와 동일할 때예) char name[20]; int score;fscanf(stdin, “%s %d”,name, score);stdin은 stdio.h에 정의된 표준입력 즉 키보드

한밭대정보통신공학과 и чунг хо 6

Page 7: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

표준입출력함수 gets와 puts의 파일입출력 버전임. 함수이름 앞에 f를 붙여서 파일입출력 버전으로 만든 것중 하나임.

char *fgets(char *, int , FILE *);예) char buf[81];

FILE *fp=fopen(“test.txt”, “r”);fgets(buf, 81, fp);//파일에서 buf로 한 줄 읽기

int fputs(char *, FILE *);예) char buf[81]=“버퍼에 있던 내용”;

FILE *fp=fopen(“test.txt”, “w”);fgets(buf, 81, fp); //buf의 내용을 파일에 쓰기

한밭대정보통신공학과 и чунг хо 7

Page 8: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

파일 출력 함수 fgetc(), fputc()는 getc(), putc()와 각각완전히 동일

int fgetc(FILE *) : int getc(FILE *) 와 동일 int fgetc(int, FILE *) : int getc(int, FILE *) 와 동일예) char ch;

FILE *fpi=fopen(“source.txt”, “r”);FILE *fpo = fopen(“target.txt”, “w”);while( (ch=fgetc(fpi)) != EOF) //End of File

putc(ch, fpo); //textfile을 한 문자씩 읽어다가 다른 파일에 복사

하는 프로그램임.

한밭대 정보통신공학과 и чунг хо 8

Page 9: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

표준입출력에 사용되는 getchar(), putchar()는getc(), putc()를 사용하여 매크로로 정의됨#define getchar() getc(stdin)#define putchar(_c) putc((_c),stdout)

한밭대 정보통신공학과 и чунг хо 9

Page 10: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

텍스트파일: 문서편집기로 문서를 편집할 수 있고파일을 열었을 때 문자가 다 보이는 파일.◦ 텍스트파일의 예: .doc, .hwp, .txt, .c, .cpp, .java 등으로끝나는 파일들◦ fprintf(), fscanf()로 자료의 입출력을 텍스트모드로 처리

이진 파일(binary file): 바이트단위로 저장하는 파일, 파일을 문서편집기로 열었을 때 일부 또는 전부가 읽을 수 없는 파일.◦ .exe과 같은 실행파일, .jpb, .pgm, .tiff, .mpeg, .avi 등사진 또는 비디오파일, .mp3과 같은 오디오 파일 등

한밭대정보통신공학과 и чунг хо 10

Page 11: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

텍스트파일과 이진파일에서 255라는 숫자의 저장방식◦ 텍스트파일: 2 5 5라는 세 글자의 숫자로서 3 bytes가 필요◦ 바이너리파일: 1바이트에 이진수 11111111과 같은 이진파일로 저장됨.

한밭대 정보통신공학과 и чунг хо 11

Page 12: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

EOF: 텍스트파일의 끝으로서 -1과 같음 foef()함수는 EOF로 끝나지 않는 이진파일의 끝을체크할 수 있는 함수, 텍스트파일의 끝도 찾음.파일 끝이면 0이 아닌 값을 반환, 끝이면 NULL반환◦ 예) FILE *fpi = fopen(“test.jpg”, “rb”); //b는 binary file 의미

while(!feof(fp))putc(getc(fp), fpo);

//이진 파일의 복사, 텍스트파일도 복사 가능//파일 입출력 모드에 이진파일의 경우 b를 붙임// “rb”, “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b”

한밭대 정보통신공학과 и чунг хо 12

Page 13: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

foef()함수int feof(FILE *);표준 입력인 경우while(!feof(stdin)){};//이 경우 파일의 끝은 ^Z를 입력, UNIX운영체제에서

는 ^D를 사용 ferror()함수int ferror(FILE *); //파일처리 오류 시 0 반환, 아니면

0이 아닌 값을 반환

한밭대정보통신공학과 и чунг хо 13

Page 14: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

한밭대 정보통신공학과 и чунг хо

이진파일의 읽기 쓰기 함수size_t fwrite(const void *, size_t, size_t, FILE *);size_t fread(const void *, size_t, size_t, FILE *);

//인자 설명(buffer, 입출력단위의 바이트크기,개수,파일포인터)//반환값은 입력 또는 출력한 자료형의 개수

14

Page 15: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

한밭대 정보통신공학과 и чунг хо

예) 가로 세로 256x256 크기의 .pgm 이미지파일 을 복사하는 프로그램

헤더부분: “P2 256 256 255\n…” 여기서 P2는 회색파일임을 의미로 정해져 있음.256 256 은 각각 가로 세로 크기255는 graylevel의 최대값으로 항상 같은 값.\n은 정해져 있음. 그 다음 약간의 코멘트가 계속될 수 있음.

FILE *fpi=fopen(“lena.pgm”, “rb”); //이진파일 읽기모드 열기FILE *fpo=fopen(“copy.pgm”, “wb”);//이진파일 쓰기모드 열기int i; char magic[3]; int hsize, vsize; unsigned char buf[256];fscanf(fpi, “%s%d%d”, magic, &hsize, &vsize); //입력파일의 헤더읽기fprintf(fpo, “%s %d %d 255\\n”, magic, &hsize, &vsize);

//출력파일 헤더쓰기

15

Page 16: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

한밭대 정보통신공학과 и чунг хо

//파일에서 256바이트씩 읽어서 쓰기unsigned char buf[256];for(i=0;i<256;i++) {

fread(buf, sizeof(unsigned char), 256, fpi);fwrite(buf, sizeof(unsigned char), 256, fpo);

}

16

Page 17: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

한밭대 정보통신공학과 и чунг хо

int fseek(FILE *fp, long offset, int mode);Mode: SEEK_SET 파일의 시작

SEEK_CUR 파일의 현재 위치SEEK_END 파일의 끝 위치

파일의 끝에서 300000 바이트만큼 앞쪽으로 이동fseek(fpi, -300000, SEEK_END);

파일의 앞에서 200000 바이트만큼 끝쪽으로 이동fseek(fpi, 200000, SEEK_SET);

17

Page 18: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

한밭대 정보통신공학과 и чунг хо

음악/음악샘플/Kalimba.mp3 파일의 끝에서300000 bytes를 읽어서 쓰기

FILE *fpi = fopen(“Kalimba.mp3”, “rb”);FILE *fpo = fopen(“ba.mp3”, “wb”);int i;fseek(fpi, -300000, SEEK_END); for(i=0;i<300000;i++)

putc(fgetc(fpi), fpo);

18

Page 19: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

한밭대 정보통신공학과 и чунг хо

파일의 크기를 알아내는 프로그램FILE *fpi = fopen(“Kalimba.mp3”, “rb”);fseek(fpi,0, SEEK_END); printf(“file size = %d\n”, ftell(fpi));

19

Page 20: 제11강 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2016/hanbat/leechoongho/... · 2016. 12. 24. · 파일열기: fopen() 함수를사용한다. 형태: File

한밭대 정보통신공학과 и чунг хо

구조체 Structure◦ Struct TAGNAME { int a; double b; char c[12];} s;◦ Allocation of Initial Value◦ Structure Array◦ Reference of Structure Members

공용체 Union◦ Union TAGNAME { int a; double b; char c[12];}◦ Data usage, length of union

열거형 Enum◦ enum color {yellow, red, blue, magenta, green}

col;

파일 열기: File Open◦ FILE *fp;◦ fp=fopen(“filename”, “r”);◦ File handling mode: r, w, a, rb, wb, ab, r+, w+, a+◦ fclose(fp)

파일의 종류: Text File, Binary File◦ Text file: .txt, .doc, .hwp…◦ Binary

file: .exe, .jpg, .gif, .mov, .mpeg, .tif, .pgm, .ppm …. 파일 읽기/쓰기: Read/Write a file◦ fscanf, fgetc, getc, fprintf, fputc, putc, fgets, fputs:

for text file◦ fgetc, getc, fputc, putc, fwrite: for binary file

20