1 / 60

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지. 개정판. 11 장 : 파일 입출력 도서출판 - 인터비젼. 11 장 파일 입출력. 학습목표 1. 스트림과 파일 시스템을 이해한다 . 2. 파일 관련 표준 함수를 이해한다 . 3. 순차 파일과 이진 파일에 대해 이해한다 . 4. 표준 입출력 함수를 이해한다. 목차. 11 장 파일 입출력 예습시간 스트림과 파일 그리고 표준 입출력 파일 입출력 함수 실습시간 텍스트 파일 활용 이진 파일 활용 연습시간 파일 입출력 분석.

kathie
Download Presentation

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 최신 C프로그래밍 언어문제해결에서 프로그래밍까지 개정판 11장 : 파일 입출력 도서출판 - 인터비젼

  2. 11장 파일 입출력 • 학습목표 • 1. 스트림과 파일 시스템을 이해한다. • 2. 파일 관련 표준 함수를 이해한다. • 3. 순차 파일과 이진 파일에 대해 이해한다. • 4. 표준 입출력 함수를 이해한다.

  3. 목차 • 11장 파일 입출력 • 예습시간 • 스트림과 파일 그리고 표준 입출력 • 파일 입출력 함수 • 실습시간 • 텍스트 파일 활용 • 이진 파일 활용 • 연습시간 • 파일 입출력 분석

  4. 스트림과 파일 그리고 표준 입출력 예습시간 – 1 교시

  5. 스트림과 파일 그리고 표준 입출력 • 학습 개요 • 외부장치와의 논리적인 흐름을 나타내는 스트림을 이해한다. • 스트림과 파일의 관계를 이해한다. • 표준 입/출력 함수들에 대해 다룬다.

  6. 스트림과 파일 그리고 표준 입출력 • 스트림(Stream)과 파일(File) • 스트림(Stream) • 컴퓨터와 연결된 여러 주변장치와의 논리적인 흐름 • 주변장치와 연결하는 접속 채널의 개념 • 컴퓨터와 주변장치의 정보전달은 스트림을 통해 이루어짐 • 모든 정보는 스트림을 통해 전달 • 파일 • C언어에서 파일은 모든 주변 장치를 포함한다. • 디스크에 저장된 파일 • 디스플레이 화면 • 키보드 • 프린터 • 직/병렬 포트 • 테이프 등등…

  7. 스트림과 파일 그리고 표준 입출력 • 스트림과 파일 • 스트림과 파일의 관계 • 스트림은 파일을 연결하기 위한 논리적인 접근 통로 • 오픈된 스트림을 통해 정보를 전달하거나 받아들임 • 스트림 사용을 위해서는 항상 오픈(Open) 되어야하고 사용 후 닫아(Close) 주어야 한다. • C언어에서 제공되는 표준 입/출력 장치 • 키보드 : 표준 입력 장치 • 디스플레이 화면 : 표준 출력 장치 • 표준 스트림 • 표준 입/출력 장치의 연결을 위해 사용되는 스트림 • C 프로그램 시작시 자동적으로 오픈되어 사용 가능하다. • 종류 • stdin : 표준 입력 스트림 (키보트와 연결된 스트림) • stdout : 표준 출력 스트림 (디스플레이 화면과 연결된 스트림) • stderr : 표준 에러 스트림 (디스플리이 화면과 연결된 스트림)

  8. 스트림과 파일 그리고 표준 입출력 • 표준 입출력 함수 • 표준 입/출력 스트림을 이용하는 함수 • 표준 입/출력 함수 정의 헤더 파일 • stdio.h • 표준 입출력 함수의 종류 • 형식이 있는 입출력 함수 – printf(), scanf() • 단일 문자 입출력 함수 – getchar(), putchar() • 문자열 입출력 함수 – gets(), puts() • 버퍼형 입출력 함수 – sscanf(), sprintf()

  9. 스트림과 파일 그리고 표준 입출력 • 단일 문자 입출력 함수 • 단일 문자 입력 함수 – getchar() • 함수의 원형 • int getchar() • 키보드로 부터 하나의 문자를 입력 받는다. • 리턴 결과 • 정상적 수행 : 해당 문자에 대한 ASCII 코드 값 • 비정상적 수행 : EOF 값 반환 • 단일 문자 출력 함수 – putchar() • 함수의 원형 • int putchar(int ch) • 화면에 ch에 해당되는 문자를 출력 • 리턴 결과 • 정상적 수행 : 입력된 값이 반환 • 비정상적 수행 : EOF 값 반환

  10. 스트림과 파일 그리고 표준 입출력 • 단일 문자 입/출력 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03     char ch; • 04     printf("한문자 입력 :"); • 05     ch = getchar(); // 한 문자 입력 • 06     printf("입력받은 결과 출력 : "); • 07     putchar(ch);    // 입력받은 문자 출력 • 08     putchar('\n');   // 특수 문자 출력 • 09 } • 출력 결과 : _______________ 입력된 문자 출력

  11. 스트림과 파일 그리고 표준 입출력 • 문자열 입출력 함수 • 문자열 입력함수 – gets() • 함수의 원형 • char *gets(char *str); • 키보드로 부터 입력된 문자열 값을 저장 • *str : 입력된 문자열 저장 주소 • 입력된 문자열은 키보드로부터 <Enter>키를 누른 위치까지 포함 • 공백문자도 문자열에 포함됨 • <Enter>값은 자동적으로 '\0'(NULL) 값으로 변경되어 저장됨 • 반환 결과 • 정상적일 경우 : 저장된 문자열의 주소 • 비정상적일 경우 : EOF 값

  12. 스트림과 파일 그리고 표준 입출력 • 문자열 입출력 함수 • 문자열 출력함수 – puts() • 함수의 원형 • int puts(char *str); • 입력된 문자열(*str)을 화면에 출력 • 출력시 '\0' 값은 '\n'(Enter) 값으로 변형되어 출력 • 반환 결과 • 정상적일 경우 : 음이 아닌 값 • 에러 발생 시 : EOF 값 반환

  13. 스트림과 파일 그리고 표준 입출력 • 문자열 입출력 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03     char buffer[80], *bp; • 04     printf("문자열 입력 : "); • 05     bp = gets(buffer); // 문자열 입력 • 06     if(bp != EOF){  // 정상적인 입력 시 • 07             puts("입력된 문자열"); • 08             puts(bp); // 포인터를 통한 출력 • 09             puts(buffer); // 배열을 통한 출력 • 10     } • 11 } • 입력 값 : 안녕하세요 여러분 • 출력 결과:_____________________ •             :_____________________ 안녕하세요 여러분 안녕하세요 여러분

  14. 스트림과 파일 그리고 표준 입출력 • 버퍼형 입출력 함수 • 형식을 가진 형태로 표준입출력 스트림이 아닌 문자열 변수공간(Buffer)에 값을 저장하거나 읽어올 때 사용 • 버퍼형 입력 함수 – sscanf() • 함수의 원형 • int sscanf(char *buffer, char *format [,argument ] ... ); • buffer : 입력 데이터가 존재하는 문자열 주소 • format : 형식지정문자를 포함한 문자열 • argument : 값을 저장할 변수 리스트 • 문자열로 저장된 데이터를 형식에 맞도록 추출할 목적으로 사용

  15. 스트림과 파일 그리고 표준 입출력 • 버퍼형 입력 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03     char  token[] = "128 14.8 language"; • 04     int i; • 05     float f; • 06     char name[80]; • 07     //문자열로부터 각각의 데이터 추출 • 08     sscanf( token, "%d %f %s", &i,&f,name ); • 09     //추출 내용 출력 • 10   printf( "Integer = %d, Float = %f, String = %s\n", i,f,name ); • 11 } • 출력 결과 : _________________________________________ 128 14.8 language

  16. 스트림과 파일 그리고 표준 입출력 • 버퍼형 출력함수 – sprintf() • 형식화된 문자열을 화면이 아닌 문자열 변수에 저장 • 여러 데이터 유형을 문자열로 만들 때 유용 • 함수의 원형 • int sprintf(char *buffer, char *format [,argument] ... ); • buffer : 출력할 문자열의 주소 • format : 형식지정문자를 포함한 문자열 • argument : 값을 저장하고 있는 변수 리스트 • buffer에 출력된 문자열의 수 반환

  17. 스트림과 파일 그리고 표준 입출력 • 버퍼형 출력함수 사용 예 • 01 #include <stdio.h> • 02 void main() • 03 { • 04     char  buffer[200]; • 05     int i = 28,j; • 06     double d = 1.3456; • 07     char c='x'; • 08     char str[] = "c programming"; • 09     j = sprintf(buffer,"i= %d, d = %f, c= %c \n",i,d,c); • 10     j = sprintf(buffer + j, "str = %s", str); • 11     puts(buffer); • 12 } • 출력결과 : __________________________________ • ______________________________________ i= 28, d = 1.3456, c= x c programming

  18. 파일 입출력 함수 예습시간 – 2 교시

  19. 파일 입출력 함수 • 학습 개요 • 일반 파일에 대한 처리 과정을 이해한다. • 파일 시스템과 파일 조작함수에 대해 다룬다. • 파일의 종류와 이 파일의 입출력 함수들에 대해 알아본다. • 파일의 임의 접근 방식에 대해 이해한다.

  20. 파일 입출력 함수 • 파일 시스템의 개요 • 파일에 데이터를 쓰거나 읽기 위해 스트림 형성이 필요 • 파일에 스트림 형성 방법 • 파일 포인터 이용 • 파일 포인터 • 파일을 가리키는 FILE 타입의 구조체 • FILE 포인터를 이용한 파일 입출력 단계 • 1. 파일 포인터 선언 • FILE *fp; // fp는 파일 포인터 변수 • 2. 파일 포인터를 이용해 파일 열기 • fp = fopen(…); // 파일 오픈 후 그 파일에 대한 포인터 반환 • 3. 파일에 대한 입/출력 처리 • 파일 포인터 fp을 이용한 파일 입/출력 처리 • 4. 파일 닫기 • fclose(fp); // 사용 후 파일 포인터를 이용해 해당 파일 닫기

  21. 파일 입출력 함수 • 파일 조작 함수 • 파일 열기와 닫기 • 파일 스트림의 연결과 닫기 • fopen 함수 • fclose 함수 • 파일 검사 • 입출력 과정에서 발생된 에러 확인 • feof 함수 • ferror 함수 • 기타 파일 조작 함수 • 파일의 제거 및 이름 변경 • rename 함수 • remove 함수

  22. 파일 입출력 함수 • 파일 열기 (fopen 함수) • 함수의 원형 • FILE* fopen(char *filename, char*mode); • filename : 파일의 이름 • mode : 파일에 대한 접근 방법 • 반환 값 : 파일에 대한 포인터 (FILE *) • mode의 종류

  23. 파일 입출력 함수 • 파일 열기 (fopen 함수) • fopen의 정상적 수행 시 해당 파일의 포인터를 리턴 하지만 실패 시 NULL 값을 리턴 • 파일 오픈 과정에서 에러 확인 필요 • 사용 예> • 1      FILE *fp; • 2      ... • 3      fp = fopen("test.dat","r"); • 4      if(fp == NULL){ • 5              printf(" 파일오픈 실패 !“); • 6              exit(1); • 7      } • 파일 닫기 (fclose 함수) • 함수 원형 • int fclose(FILE *fp); • 오픈된 파일은 사용 후 반드시 닫아야 한다. • 열려진 파일 포인터를 인지를 화여 fclose 함수 호출

  24. 파일 입출력 함수 • 파일 입출력 과정 • 파일 입출력 과정은 버퍼 공간을 통해 이루어진다. • 시스템에 의해 자동적으로 버퍼의 공간에 저장된 데이터 파일로 출력 • 버퍼의 사용 목적 • 두 시스템간의 완충 작용 ( CPU와 주변장치 사이) • 두 시스템 사이의 처리 속도 문제 해결 • 필요에 따라 버퍼의 내용을 강제적으로 출력 하고자 할 경우에는 fflush 함수를 사용한다. • fflush 함수 • 버퍼의 내용을 강제적으로 파일에 작성하고 버퍼 비우는 역할 수행 • 함수의 원형 • int fflush(FILE *fp); • fp : 오픈된 파일의 포인터

  25. 파일 입출력 함수 • 파일 검사 함수 ( feof / ferror ) • feof 함수 • 파일의 끝에 정상적으로 도달 했는지의 여부 검사 • 함수의 원형 • int feof(FILE *fp); • 처리 결과 • fp가 파일의 끝에 도달할 경우 : 0이 아닌 값 • 그렇지 않을 경우 : 0 • ferror 함수 • 파일에 에러가 존재하는지의 여부 검사 • 함수의 원형 • int ferror(FILE *fp); • 처리 결과 • 파일 처리 과정 중 에러 발생 시 : 0이 아닌 값 • 그렇지 않을 경우 : 0

  26. 파일 입출력 함수 • 기타 파일 조작 함수 ( rename / remove ) • rename 함수 • 파일의 이름을 변경 • 함수의 원형 • int rename(char *oldname, char*newname); • oldname : 변경할 파일 이름 • newname : 새롭게 변경될 파일 이름 • remove 함수 • 해당 파일을 삭제 • 함수의 원형 • int remove(char*path); • path : 제거할 파일의 경로(이름) • 두 함수다 정상적 수행 후 결과 값을 0으로 그렇지 않을 경우 0이 아닌 값을 반환한다.

  27. 파일 입출력 함수 • 텍스트 파일 입/출력 함수 • 텍스트로 오픈된 파일의 조작함수 • 단일 문자 입출력 함수 • 함수의 종류 • int getc( FILE *stream); // 스트림으로부터 한 문자 입력 매크로 • int fgetc( FILE *stream); // 스트림으로부터 한 문자 입력 함수 • int putc( int c,FILE* stream);   // 스트림에 한 문자 출력 매크로 • int fputc( int c,FILE* stream);  // 스트림에 한 문자 출력 함수 • 처리 결과 • 정상적 수행 • 해당 문자를 반환하고 파일 포인터를 1중가 시킴 • 파일의 끝이거나 오류 발생 • EOF(-1) 값 반환

  28. 파일 입출력 함수 • 단일 문자 입출력 함수 사용 예 • 01 #include <stdio.h> • 02 #include <stdlib.h> // exit()함수 • 03 int main(){ • 04     FILE *rfp, *wfp; • 05     char c; • 06     rfp = fopen("test.txt","r"); • 07     if(rfp == NULL){ • 08             printf("test.txt 파일이 존재하지 않습니다.\n"); • 09             exit(1); • 10     } • 11     wfp = fopen("copy.txt","w"); • 12     if(wfp == NULL){ • 13             printf("copy.txt 파일생성이 오류 발생.\n"); • 14             exit(1); • 15     } • 16     while((c=fgetc(rfp)) != EOF){ • 17             fputc(c,wfp); • 18     } • 19     fclose(rfp); • 20     fclose(wfp); • 21     printf("text.txt 을 copy.txt파일로 복사 완료 되었습니다.\n"); • 22     return 0; • 24 }

  29. 파일 입출력 함수 • 문자열 입출력 함수 (fgets / fputs) • 텍스트 파일에 대한 문자열 입출력 제공 • fgets()함수 • 문자열 입력 함수 • 입력 스트림으로부터 n-1개의 문자를 읽어 들여 문자열 변수에 저장 • 문자열 입력 시 '\n'문자를 만나면 그때까지의 문자열을 저장 • 문자열 마지막에 '\0'문자 자동 포함 • 함수의 원형 • char *fgets( char* string, int n, FILE *stream); • string  : 문자열 저장 버퍼 • n      : 입력 최대 문자 수 • stream  : 입력용 파일 포인터 • 반환 값 : 파일의 끝이나 에러 발생시 EOF • 정상적일 경우 저장된 문자열의 주소

  30. 파일 입출력 함수 • fgets() 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03     FILE *stream; • 04     char line[30]; • 05     if( (stream = fopen( "test.txt", "r" )) != NULL ){ • 06             while( fgets(line, 30, stream ) != NULL){ • 07                     printf( "line = : [%s]\n", line); • 08             } • 09             fclose( stream ); • 10     } • 11 } • 입/출력 결과 실행 화면 test.txt 파일

  31. 파일 입출력 함수 • fputs 함수 • 문자열을 파일에 작성하기 위해 사용 • 문자열을 파일로 출력할 때 문자열의 맨 마지막에 존재하는 '\0' (NULL)문자는 출력 되지 않는다. • 함수의 원형 • int fputs( char *string, FILE *stream); • string  : 출력할 문자열 • stream  : 출력 대상 파일 포인터 • 반환 값 : 에러 발생시 EOF 발생 •           정상적인 출력 시 음수가 아닌 값을 반환

  32. 파일 입출력 함수 • fputs()함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03     FILE *stream; • 04     static char string[] = "Binary Files\nText Files"; • 05     if( (stream = fopen( "file.txt", "w" )) != NULL ){ • 06          fputs(string,stream); • 07     } • 08     fclose( stream ); • 09 } • 출력 결과 : ______________________ •             ______________________ Binary Files Text Files

  33. 파일 입출력 함수 • 형식을 갖춘 파일 입출력 ( fprintf / fscanf ) • fprintf() 함수 • 형식을 포함하여 파일에 텍스트 문자열 작성 • printf() 함수와 비슷하지만 출력 위치가 파일이다. • 함수 원형 • int fprintf( FILE* stream, char*format [, argument ]...); • stream : 출력 파일 포인터 • format : 형식 지정 문자을 포함한 출력 문자열 • argument : 인수 리스트 • 반환 값 : 정상적인 수행 시 출력한 바이트 수를 리턴 •           오류 발생 시 음수 값 리턴

  34. 파일 입출력 함수 • fscanf() 함수 • 형식을 포함하여 텍스트 파일로부터 값 읽기 • scanf와 동일하게 사용되며 표준 입력 장치가 아닌 파일로부터 입력 • 표준 입력 장치의 파일의 끝 ( CTRL + Z ) • 함수의 원형 • int fscanf( FILE *stream, char *format [, argument ]... ); • stream : 입력 파일 포인터 • format : 입력 형식 제어 문자열 • argument : 인수 리스트 • 반환 값 : 정상적인 수행 시 인수의 개수를 반환 •           파일의 끝이나 에러 발생시 EOF 반환 • 이 두 함수에서 입력 파일 포인터를 stdin(표준 입력)으로 출력 파일 포인터를 stdout(표준 출력)으로 지정 시 scanf()와 printf()함수와 동일한 효과 발생

  35. 파일 입출력 함수 • 형식을 갖춘 파일 입출력 함수 사용 예 • 01 #include <stdio.h> • 02 void main(){ • 03 FILE *in,*out; • 04     int     ivalue = 128, i; • 05     float   fvalue = 2.35f, f; • 06     char    str[] = "textfile", s[80]; • 07     // 파일 쓰기 • 08     out = fopen( "file.txt", "w" ); • 09     fprintf(out, "%d %f %s", ivalue, fvalue, str ); • 10     fclose(out); • 11     // 파일 읽기 • 12     in = fopen("file.txt","r"); • 13     if(in != NULL){ • 14             fscanf(in,"%d %f %s",&i,&f,s); • 15             fprintf(stdout,"int = %d , double = %f \n", i,f); • 16             printf("str = %s \n",s); • 17             fclose(in); • 18     } • 19 }

  36. 파일 입출력 함수 • 이진 파일 입/출력 함수 (fread / fwrite) • 문자 변환 없이 이진 파일의 입/출력 함수 • fread 함수 • 이진데이터의 입력 함수 • 함수의 원형 • size_t fread(void *buffer,size_t size,size_t count,FILE *stream ); • buffer : 저장할 데이터 위치 • size : 읽을 데이터의 크기 • count : 읽을 데이터의 개수 • stream : 읽을 파일 포인터 • 반환 값 : 정상적일 경우 읽은 데이터의 개수 •           파일의 끝이나 오류 발생시 실제 읽은 데이터의 개수로 • count 값보다 작은 값 반환

  37. 파일 입출력 함수 • fwrite 함수 • 이진 파일의 출력 함수 • 함수의 원형 • size_t fwrite(void *buffer,size_t size,size_t count,FILE *stream ); • buffer : 저장 대상 데이터 위치 • size : 작성할 데이터의 크기 • count : 작성할 데이터의 개수 • stream : 작성할 파일 포인터 • 반환 값 : 실제 저장된 데이터의 개수 •           오류 발생시 count 값보다 작은 값 반환

  38. 파일 입출력 함수 01 #include <stdio.h> 02 void main(){ 03     FILE *in, *out; 04     static int ivalue[] = {100,200,300}; 05     int iresult[3], i, cnt; 06     //쓰기용 이진 파일 열기 07     out = fopen("file.bin","wb"); 08     if(out==NULL){ 09             printf("file.bin 파일 열기 실패 !"); 10             return; 11     } 12     // 값 저장 13     cnt = fwrite(ivalue,sizeof(int),3,out); 14     if(cnt != 3) { 15             printf("ivalue 쓰기 실패 !\n"); 16             fclose(out); 17             return; 18     } 19     fclose(out); 20     //읽기용 이진 파일 열기 21     in = fopen("file.bin","rb"); 22     if(in==NULL){ 23             printf("file.bin 파일 열기 실패 !\n"); 24             return; 25     } • fread와 fwrite 함수 사용 예 26     // 정수 값 읽기 27     i=0; 28     do{ 29             cnt=fread(&iresult[i],sizeof(int),1,in); 30             i++; 31     }while(cnt == 1); 32     if(ferror(in)){ 33             printf("파일 읽기 에러 !\n"); 34             fclose(in); 35             return; 36     } 37     if(feof(in)){ 38             printf(" 파일읽기 완료 !\n"); 39             printf(" 결과 데이터 : "); 40             for(i=0; i<3;i++){ 41                     printf("%5d",iresult[i]); 42             } 43             printf("\n"); 44     } 45     fclose(in); 46 }

  39. 파일 입출력 함수 • 임의 파일 접근 함수 (fseek, ftell, rewind) • 일반적인 파일 입출력 • 순차적 접근 방식 • 순차적으로 값을 읽고 자동적으로 파일 포인터 증가 방식 • 임의 접근 방식 • 읽고자 하는 위치로 파일 포인터 이동 • 임의 파일 접근 함수의 종류 • fseek • ftell • rewind

  40. 파일 입출력 함수 • fseek 함수 • 파일 포인터를 원하는 위치로 이동 시키는 함수 • 함수의 원형 • int fseek( FILE *stream, long offset, int origin ); • stream : 파일 포인터 • offset  : 지정된 시작 위치에서부터 떨어진 바이트의 수 • origin  : 시작 위치 • 반환 값 : 정상적인 수행 후 파일 포인터 해당 위치로 이동, • 결과 값 0반환 •           실패 시 0이 아닌 다른 값 반환 • 시작 위치(origin)의 종류

  41. 파일 입출력 함수 • fseek 함수 사용 예 • fseek(stream, 100L, SEEK_SET); • 파일의 시작 위치에서 100바이트 떨어진 위치로 파일 포인터 이동 • fseek(stream, 30L, SEEK_CUR); • 파일포인터의 현재 위치에서 30바이트 증가된 위치로 파일 포인터 이동 • fseek(stream, -20L, SEEK_END); • 파일의 끝 위치에서 20바이트 감소된 위치로 파일 포인터 이동 • ftell 함수 • 현재의 파일 포인터 위치 반환 함수 • 함수의 원형 • long ftell( FILE *stream); • stream  : 파일 포인터 • 반환 값 : 정상적으로 수행 시 파일 포인터의 현재 위치 반환 •           실패 시 -1값을 반환 • rewind 함수 • 파일 포인터의 위치를 처음으로 이동 • 함수의 원형 • void rewind( FILE *stream); • stream  : 파일 포인터 • 반환 값 : 없음 (파일 포인터의 위치를 처음으로 이동)

  42. 파일 입출력 함수 • fseek, ftell 그리고 rewind 함수 사용 예 01 #include <stdio.h> 02 void main(){ 03     FILE *in; 04     int result1,result2, seek; 05     //읽기용 이진 파일 열기 06     in = fopen("file.bin","rb"); 07     if(in==NULL){ 08             printf("file.bin 파일 열기 실패 !\n"); 09             return; 10     } 11     // 정수 값 읽기 12     seek = fseek(in,-(sizeof(int)),SEEK_END); 13     if(seek == 0){ // 정상적인 이동 14             printf("locattion after seek : %d \n", ftell(in)); 15             fread(&result1,sizeof(int),1,in); 16             printf("feek = %d\n",result1); 17             rewind(in); 18             printf("location after rewind : %d \n", ftell(in)); 19             fread(&result2,sizeof(int),1,in); 20             printf("rewind = %d\n",result2); 21     } 22     fclose(in); 23 }

  43. 텍스트 파일 활용 실습시간 – 1 교시

  44. 텍스트 파일 활용 • 학습개요 • 예제를 통한 텍스트 파일 관련 함수를 이용한다. • 간단한 텍스트 문서 편집기를 만든다. • 문자 조작 함수를 사용한다.

  45. 텍스트 파일 활용 • 텍스트 편집기 • 문제 정의 • 텍스트 편집기는 다양한 분야에서 활용되고 있다. 이러한 텍스트 편집기로 동작 가능한 프로그램을 만들어 보자. 만들 텍스트 편집기의 기능은 새 파일 작성, 불러오기, 저장하기 기능과 라인단위의 수정 기능을 포함하고 있다. 새 파일 작성은 키보드로부터 문자열을 입력 받아 문자열 공간에 저장하고 이 내용을 새로운 파일로 작성한다. 불러오기는 특정 파일을 읽어 화면에 출력시킨다. 또한 수정 기능은 라인 단위의 수정 기능만을 제공한다. 이러한 내용을 만족하는 텍스트 편집기를 작성 하시오. • 입/출력 조건 • 입력 조건 • 1. 작업 선택(1: 새파일, 2: 열기, 3: 수정 , 4: 종료) • 2. 새 파일 선택 시 문자열 •    입력 문자열 입력 종료는 [CTRL + Z] 입력 - [EOF 의미] • 입력 종료 시 저장 여부 확인 • 3. 불러오기 선택 시 파일의 이름 입력 • 4. 수정하기 선택 시 수정할 파일 이름 입력 •    수정을 위해 라인과 문자열 입력 •    수정 후 저장 여부 확인 • 6. 텍스트로 저장할 문자열의 크기는 1024 바이트로 한정한다.

  46. 텍스트 파일 활용 • 입/출력 조건 • 출력 조건 • 1. 불러오기 선택 시 해당 파일의 내용을 화면에 출력 • 2. 수정하기 선택 시 먼저 선택된 파일을 라인단위로 출력 •    수정 여부에 대한 메시지 출력 • 관련 함수 및 식 • 1.텍스트 기반 파일 관련 함수 (<stdio.h>) • fopen(), fclose() // 파일 열기와 닫기 • gets(), puts()   // 표준 입출력을 통한 문자열 읽기와 쓰기 • getchar()       // 표준 입력으로부터 한 문자 입력 • fputs(), fgets() // 파일에 문자열 읽기와 쓰기 • 2.문자열 조작함수(<string.h>) • strcat()          // 문자열 결합 • 3.기타 함수 • tolower()       // 한 문자를 소문자로 <ctype.h> • fflush()         // 버퍼비우기 <stdio.h> • system("cls")   // 화면 클리어 <windows.h>

  47. 텍스트 파일 활용 • 알고리즘 (또는 플로우 차트) • 1) 작업 선택(1:새파일 2: 열기 3: 수정 4: 종료) • 1.1 새파일 작업 선택 시 • 1.1.1 <CTRL>+Z 값을 만날 때 까지 문자열을 입력 받는다. • 1.1.2 입력 문자열 저장 • 1.1.2.1 저장할 이름 입력 • 1.1.2.1 내용 저장 • 1.2 열기 선택 시 • 1.2.1 열기를 원하는 파일 이름 선택 • 1.2.1 화면에 라인단위로 출력 • 1.3 수정 선택 시 • 1.3.1 수정 파일에 대한 내용을 화면에 출력 • 1.3.2 수정을 위한 라인 번호와 문자열 입력 • 1.3.2 파일에 수정 결과 반영 • 2) 종료를 선택하기 전까지 1)을 계속해서 반복한다.

  48. 텍스트 파일 활용 • 프로그램 구조체차트

  49. 텍스트 파일 활용 • 프로그램 작성 • 1 단계 • 349페이지의 프로그램을 위의 분석된 내용을 토대로 작성한 후 editor.c 파일로 저장하자. ①. getchar() ②. getchar() ③. gets(line) != NULL ④. strcat(pb,snum) ⑤. fp = fopen(fname,"w");       ⑥. strcat(bp,str); ⑦. strcat(bp,"\n"); ⑧. strcat(bp,line)

  50. 텍스트 파일 활용 • 2 단계 • 다음 입력 조건에 대한 결과를 작성하여 보자 선택 1 결과 : 선택 2 결과 : 선택 3 결과 : 선택 4 결과 :

More Related