최신
This presentation is the property of its rightful owner.
Sponsored Links
1 / 60

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


  • 166 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


C

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

개정판

11장 : 파일 입출력

도서출판 - 인터비젼


C

11장 파일 입출력

  • 학습목표

    • 1. 스트림과 파일 시스템을 이해한다.

    • 2. 파일 관련 표준 함수를 이해한다.

    • 3. 순차 파일과 이진 파일에 대해 이해한다.

    • 4. 표준 입출력 함수를 이해한다.


C

목차

  • 11장 파일 입출력

    • 예습시간

      • 스트림과 파일 그리고 표준 입출력

      • 파일 입출력 함수

    • 실습시간

      • 텍스트 파일 활용

      • 이진 파일 활용

    • 연습시간

      • 파일 입출력 분석


C

스트림과 파일 그리고 표준 입출력

예습시간 – 1 교시


C

스트림과 파일 그리고 표준 입출력

  • 학습 개요

    • 외부장치와의 논리적인 흐름을 나타내는 스트림을 이해한다.

    • 스트림과 파일의 관계를 이해한다.

    • 표준 입/출력 함수들에 대해 다룬다.


C

스트림과 파일 그리고 표준 입출력

  • 스트림(Stream)과 파일(File)

    • 스트림(Stream)

      • 컴퓨터와 연결된 여러 주변장치와의 논리적인 흐름

      • 주변장치와 연결하는 접속 채널의 개념

      • 컴퓨터와 주변장치의 정보전달은 스트림을 통해 이루어짐

      • 모든 정보는 스트림을 통해 전달

    • 파일

      • C언어에서 파일은 모든 주변 장치를 포함한다.

        • 디스크에 저장된 파일

        • 디스플레이 화면

        • 키보드

        • 프린터

        • 직/병렬 포트

        • 테이프 등등…


C

스트림과 파일 그리고 표준 입출력

  • 스트림과 파일

    • 스트림과 파일의 관계

      • 스트림은 파일을 연결하기 위한 논리적인 접근 통로

      • 오픈된 스트림을 통해 정보를 전달하거나 받아들임

      • 스트림 사용을 위해서는 항상 오픈(Open) 되어야하고 사용 후 닫아(Close) 주어야 한다.

    • C언어에서 제공되는 표준 입/출력 장치

      • 키보드 : 표준 입력 장치

      • 디스플레이 화면 : 표준 출력 장치

    • 표준 스트림

      • 표준 입/출력 장치의 연결을 위해 사용되는 스트림

      • C 프로그램 시작시 자동적으로 오픈되어 사용 가능하다.

      • 종류

        • stdin : 표준 입력 스트림 (키보트와 연결된 스트림)

        • stdout : 표준 출력 스트림 (디스플레이 화면과 연결된 스트림)

        • stderr : 표준 에러 스트림 (디스플리이 화면과 연결된 스트림)


C

스트림과 파일 그리고 표준 입출력

  • 표준 입출력 함수

    • 표준 입/출력 스트림을 이용하는 함수

    • 표준 입/출력 함수 정의 헤더 파일

      • stdio.h

    • 표준 입출력 함수의 종류

      • 형식이 있는 입출력 함수 – printf(), scanf()

      • 단일 문자 입출력 함수 – getchar(), putchar()

      • 문자열 입출력 함수 – gets(), puts()

      • 버퍼형 입출력 함수 – sscanf(), sprintf()


C

스트림과 파일 그리고 표준 입출력

  • 단일 문자 입출력 함수

    • 단일 문자 입력 함수 – getchar()

      • 함수의 원형

        • int getchar()

      • 키보드로 부터 하나의 문자를 입력 받는다.

      • 리턴 결과

        • 정상적 수행 : 해당 문자에 대한 ASCII 코드 값

        • 비정상적 수행 : EOF 값 반환

    • 단일 문자 출력 함수 – putchar()

      • 함수의 원형

        • int putchar(int ch)

      • 화면에 ch에 해당되는 문자를 출력

      • 리턴 결과

        • 정상적 수행 : 입력된 값이 반환

        • 비정상적 수행 : EOF 값 반환


C

스트림과 파일 그리고 표준 입출력

  • 단일 문자 입/출력 함수 사용 예

    • 01 #include <stdio.h>

    • 02 void main(){

    • 03     char ch;

    • 04     printf("한문자 입력 :");

    • 05     ch = getchar(); // 한 문자 입력

    • 06     printf("입력받은 결과 출력 : ");

    • 07     putchar(ch);    // 입력받은 문자 출력

    • 08     putchar('\n');   // 특수 문자 출력

    • 09 }

    • 출력 결과 : _______________

입력된 문자 출력


C

스트림과 파일 그리고 표준 입출력

  • 문자열 입출력 함수

    • 문자열 입력함수 – gets()

      • 함수의 원형

        • char *gets(char *str);

      • 키보드로 부터 입력된 문자열 값을 저장

      • *str : 입력된 문자열 저장 주소

      • 입력된 문자열은 키보드로부터 <Enter>키를 누른 위치까지 포함

      • 공백문자도 문자열에 포함됨

      • <Enter>값은 자동적으로 '\0'(NULL) 값으로 변경되어 저장됨

      • 반환 결과

        • 정상적일 경우 : 저장된 문자열의 주소

        • 비정상적일 경우 : EOF 값


C

스트림과 파일 그리고 표준 입출력

  • 문자열 입출력 함수

    • 문자열 출력함수 – puts()

      • 함수의 원형

        • int puts(char *str);

      • 입력된 문자열(*str)을 화면에 출력

      • 출력시 '\0' 값은 '\n'(Enter) 값으로 변형되어 출력

      • 반환 결과

        • 정상적일 경우 : 음이 아닌 값

        • 에러 발생 시 : EOF 값 반환


C

스트림과 파일 그리고 표준 입출력

  • 문자열 입출력 함수 사용 예

    • 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 }

    • 입력 값: 안녕하세요 여러분

    • 출력 결과:_____________________

    •             :_____________________

안녕하세요 여러분

안녕하세요 여러분


C

스트림과 파일 그리고 표준 입출력

  • 버퍼형 입출력 함수

    • 형식을 가진 형태로 표준입출력 스트림이 아닌 문자열 변수공간(Buffer)에 값을 저장하거나 읽어올 때 사용

    • 버퍼형 입력 함수 – sscanf()

      • 함수의 원형

        • int sscanf(char *buffer, char *format [,argument ] ... );

      • buffer : 입력 데이터가 존재하는 문자열 주소

      • format : 형식지정문자를 포함한 문자열

      • argument : 값을 저장할 변수 리스트

      • 문자열로 저장된 데이터를 형식에 맞도록 추출할 목적으로 사용


C

스트림과 파일 그리고 표준 입출력

  • 버퍼형 입력 함수 사용 예

    • 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 }

    • 출력 결과 : _________________________________________

12814.8language


C

스트림과 파일 그리고 표준 입출력

  • 버퍼형 출력함수 – sprintf()

    • 형식화된 문자열을 화면이 아닌 문자열 변수에 저장

    • 여러 데이터 유형을 문자열로 만들 때 유용

    • 함수의 원형

      • int sprintf(char *buffer, char *format [,argument] ... );

    • buffer : 출력할 문자열의 주소

    • format : 형식지정문자를 포함한 문자열

    • argument : 값을 저장하고 있는 변수 리스트

    • buffer에 출력된 문자열의 수 반환


C

스트림과 파일 그리고 표준 입출력

  • 버퍼형 출력함수 사용 예

    • 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


C

파일 입출력 함수

예습시간 – 2 교시


C

파일 입출력 함수

  • 학습 개요

    • 일반 파일에 대한 처리 과정을 이해한다.

    • 파일 시스템과 파일 조작함수에 대해 다룬다.

    • 파일의 종류와 이 파일의 입출력 함수들에 대해 알아본다.

    • 파일의 임의 접근 방식에 대해 이해한다.


C

파일 입출력 함수

  • 파일 시스템의 개요

    • 파일에 데이터를 쓰거나 읽기 위해 스트림 형성이 필요

    • 파일에 스트림 형성 방법

      • 파일 포인터 이용

    • 파일 포인터

      • 파일을 가리키는 FILE 타입의 구조체

    • FILE 포인터를 이용한 파일 입출력 단계

      • 1. 파일 포인터 선언

        • FILE *fp; // fp는 파일 포인터 변수

      • 2. 파일 포인터를 이용해 파일 열기

        • fp = fopen(…); // 파일 오픈 후 그 파일에 대한 포인터 반환

      • 3. 파일에 대한 입/출력 처리

        • 파일 포인터 fp을 이용한 파일 입/출력 처리

      • 4. 파일 닫기

        • fclose(fp); // 사용 후 파일 포인터를 이용해 해당 파일 닫기


C

파일 입출력 함수

  • 파일 조작 함수

    • 파일 열기와 닫기

      • 파일 스트림의 연결과 닫기

      • fopen 함수

      • fclose 함수

    • 파일 검사

      • 입출력 과정에서 발생된 에러 확인

      • feof 함수

      • ferror 함수

    • 기타 파일 조작 함수

      • 파일의 제거 및 이름 변경

      • rename 함수

      • remove 함수


C

파일 입출력 함수

  • 파일 열기 (fopen 함수)

    • 함수의 원형

      • FILE* fopen(char *filename, char*mode);

        • filename : 파일의 이름

        • mode : 파일에 대한 접근 방법

        • 반환 값 : 파일에 대한 포인터 (FILE *)

  • mode의 종류


C

파일 입출력 함수

  • 파일 열기 (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 함수 호출


C

파일 입출력 함수

  • 파일 입출력 과정

    • 파일 입출력 과정은 버퍼 공간을 통해 이루어진다.

    • 시스템에 의해 자동적으로 버퍼의 공간에 저장된 데이터 파일로 출력

    • 버퍼의 사용 목적

      • 두 시스템간의 완충 작용 ( CPU와 주변장치 사이)

      • 두 시스템 사이의 처리 속도 문제 해결

    • 필요에 따라 버퍼의 내용을 강제적으로 출력 하고자 할 경우에는 fflush 함수를 사용한다.

  • fflush 함수

    • 버퍼의 내용을 강제적으로 파일에 작성하고 버퍼 비우는 역할 수행

    • 함수의 원형

      • int fflush(FILE *fp);

        • fp : 오픈된 파일의 포인터


C

파일 입출력 함수

  • 파일 검사 함수 ( feof / ferror )

    • feof 함수

      • 파일의 끝에 정상적으로 도달 했는지의 여부 검사

      • 함수의 원형

        • int feof(FILE *fp);

        • 처리 결과

          • fp가 파일의 끝에 도달할 경우 : 0이 아닌 값

          • 그렇지 않을 경우 : 0

    • ferror 함수

      • 파일에 에러가 존재하는지의 여부 검사

      • 함수의 원형

        • int ferror(FILE *fp);

        • 처리 결과

          • 파일 처리 과정 중 에러 발생 시 : 0이 아닌 값

          • 그렇지 않을 경우 : 0


C

파일 입출력 함수

  • 기타 파일 조작 함수 ( rename / remove )

    • rename 함수

      • 파일의 이름을 변경

      • 함수의 원형

        • int rename(char *oldname, char*newname);

          • oldname : 변경할 파일 이름

          • newname : 새롭게 변경될 파일 이름

    • remove 함수

      • 해당 파일을 삭제

      • 함수의 원형

        • int remove(char*path);

          • path : 제거할 파일의 경로(이름)

    • 두 함수다 정상적 수행 후 결과 값을 0으로 그렇지 않을 경우 0이 아닌 값을 반환한다.


C

파일 입출력 함수

  • 텍스트 파일 입/출력 함수

    • 텍스트로 오픈된 파일의 조작함수

    • 단일 문자 입출력 함수

      • 함수의 종류

        • int getc( FILE *stream); // 스트림으로부터 한 문자 입력 매크로

        • int fgetc( FILE *stream); // 스트림으로부터 한 문자 입력 함수

        • int putc( int c,FILE* stream);   // 스트림에 한 문자 출력 매크로

        • int fputc( int c,FILE* stream);  // 스트림에 한 문자 출력 함수

      • 처리 결과

        • 정상적 수행

          • 해당 문자를 반환하고 파일 포인터를 1중가 시킴

        • 파일의 끝이거나 오류 발생

          • EOF(-1) 값 반환


C

파일 입출력 함수

  • 단일 문자 입출력 함수 사용 예

    • 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 }


C

파일 입출력 함수

  • 문자열 입출력 함수 (fgets / fputs)

    • 텍스트 파일에 대한 문자열 입출력 제공

    • fgets()함수

      • 문자열 입력 함수

      • 입력 스트림으로부터 n-1개의 문자를 읽어 들여 문자열 변수에 저장

      • 문자열 입력 시 '\n'문자를 만나면 그때까지의 문자열을 저장

      • 문자열 마지막에 '\0'문자 자동 포함

      • 함수의 원형

      • char *fgets( char* string, int n, FILE *stream);

        • string  : 문자열 저장 버퍼

        • n      : 입력 최대 문자 수

        • stream  : 입력용 파일 포인터

        • 반환 값 : 파일의 끝이나 에러 발생시 EOF

        • 정상적일 경우 저장된 문자열의 주소


C

파일 입출력 함수

  • 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 파일


C

파일 입출력 함수

  • fputs 함수

    • 문자열을 파일에 작성하기 위해 사용

    • 문자열을 파일로 출력할 때 문자열의 맨 마지막에 존재하는 '\0' (NULL)문자는 출력 되지 않는다.

    • 함수의 원형

      • int fputs( char *string, FILE *stream);

        • string  : 출력할 문자열

        • stream  : 출력 대상 파일 포인터

        • 반환 값 : 에러 발생시 EOF 발생

        •           정상적인 출력 시 음수가 아닌 값을 반환


C

파일 입출력 함수

  • 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


C

파일 입출력 함수

  • 형식을 갖춘 파일 입출력 ( fprintf / fscanf )

    • fprintf() 함수

      • 형식을 포함하여 파일에 텍스트 문자열 작성

      • printf() 함수와 비슷하지만 출력 위치가 파일이다.

      • 함수 원형

        • int fprintf( FILE* stream, char*format [, argument ]...);

          • stream : 출력 파일 포인터

          • format : 형식 지정 문자을 포함한 출력 문자열

          • argument : 인수 리스트

          • 반환 값 : 정상적인 수행 시 출력한 바이트 수를 리턴

          •           오류 발생 시 음수 값 리턴


C

파일 입출력 함수

  • fscanf() 함수

    • 형식을 포함하여 텍스트 파일로부터 값 읽기

    • scanf와 동일하게 사용되며 표준 입력 장치가 아닌 파일로부터 입력

    • 표준 입력 장치의 파일의 끝 ( CTRL + Z )

    • 함수의 원형

      • int fscanf( FILE *stream, char *format [, argument ]... );

        • stream : 입력 파일 포인터

        • format : 입력 형식 제어 문자열

        • argument : 인수 리스트

        • 반환 값 : 정상적인 수행 시 인수의 개수를 반환

        •           파일의 끝이나 에러 발생시 EOF 반환

  • 이 두 함수에서 입력 파일 포인터를 stdin(표준 입력)으로 출력 파일 포인터를 stdout(표준 출력)으로 지정 시 scanf()와 printf()함수와 동일한 효과 발생


C

파일 입출력 함수

  • 형식을 갖춘 파일 입출력 함수 사용 예

    • 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 }


C

파일 입출력 함수

  • 이진 파일 입/출력 함수 (fread / fwrite)

    • 문자 변환 없이 이진 파일의 입/출력 함수

    • fread 함수

      • 이진데이터의 입력 함수

      • 함수의 원형

        • size_t fread(void *buffer,size_t size,size_t count,FILE *stream );

          • buffer : 저장할 데이터 위치

          • size : 읽을 데이터의 크기

          • count : 읽을 데이터의 개수

          • stream : 읽을 파일 포인터

          • 반환 값 : 정상적일 경우 읽은 데이터의 개수

          •           파일의 끝이나 오류 발생시 실제 읽은 데이터의 개수로

          • count 값보다 작은 값 반환


C

파일 입출력 함수

  • fwrite 함수

    • 이진 파일의 출력 함수

    • 함수의 원형

      • size_t fwrite(void *buffer,size_t size,size_t count,FILE *stream );

        • buffer : 저장 대상 데이터 위치

        • size : 작성할 데이터의 크기

        • count : 작성할 데이터의 개수

        • stream : 작성할 파일 포인터

        • 반환 값 : 실제 저장된 데이터의 개수

        •           오류 발생시 count 값보다 작은 값 반환


C

파일 입출력 함수

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 }


C

파일 입출력 함수

  • 임의 파일 접근 함수 (fseek, ftell, rewind)

    • 일반적인 파일 입출력

      • 순차적 접근 방식

      • 순차적으로 값을 읽고 자동적으로 파일 포인터 증가 방식

    • 임의 접근 방식

      • 읽고자 하는 위치로 파일 포인터 이동

    • 임의 파일 접근 함수의 종류

      • fseek

      • ftell

      • rewind


C

파일 입출력 함수

  • fseek 함수

    • 파일 포인터를 원하는 위치로 이동 시키는 함수

    • 함수의 원형

      • int fseek( FILE *stream, long offset, int origin );

        • stream : 파일 포인터

        • offset  : 지정된 시작 위치에서부터 떨어진 바이트의 수

        • origin  : 시작 위치

        • 반환 값 : 정상적인 수행 후 파일 포인터 해당 위치로 이동,

        • 결과 값 0반환

        •           실패 시 0이 아닌 다른 값 반환

    • 시작 위치(origin)의 종류


C

파일 입출력 함수

  • 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  : 파일 포인터

        • 반환 값 : 없음 (파일 포인터의 위치를 처음으로 이동)


C

파일 입출력 함수

  • 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 }


C

텍스트 파일 활용

실습시간 – 1 교시


C

텍스트 파일 활용

  • 학습개요

    • 예제를 통한 텍스트 파일 관련 함수를 이용한다.

    • 간단한 텍스트 문서 편집기를 만든다.

    • 문자 조작 함수를 사용한다.


C

텍스트 파일 활용

  • 텍스트 편집기

    • 문제 정의

      • 텍스트 편집기는 다양한 분야에서 활용되고 있다. 이러한 텍스트 편집기로 동작 가능한 프로그램을 만들어 보자. 만들 텍스트 편집기의 기능은 새 파일 작성, 불러오기, 저장하기 기능과 라인단위의 수정 기능을 포함하고 있다. 새 파일 작성은 키보드로부터 문자열을 입력 받아 문자열 공간에 저장하고 이 내용을 새로운 파일로 작성한다. 불러오기는 특정 파일을 읽어 화면에 출력시킨다. 또한 수정 기능은 라인 단위의 수정 기능만을 제공한다. 이러한 내용을 만족하는 텍스트 편집기를 작성 하시오.

    • 입/출력 조건

      • 입력 조건

        • 1. 작업 선택(1: 새파일, 2: 열기, 3: 수정 , 4: 종료)

        • 2. 새 파일 선택 시 문자열

        •    입력 문자열 입력 종료는 [CTRL + Z] 입력 - [EOF 의미]

        • 입력 종료 시 저장 여부 확인

        • 3. 불러오기 선택 시 파일의 이름 입력

        • 4. 수정하기 선택 시 수정할 파일 이름 입력

        •    수정을 위해 라인과 문자열 입력

        •    수정 후 저장 여부 확인

        • 6. 텍스트로 저장할 문자열의 크기는 1024 바이트로 한정한다.


C

텍스트 파일 활용

  • 입/출력 조건

    • 출력 조건

      • 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>


C

텍스트 파일 활용

  • 알고리즘 (또는 플로우 차트)

    • 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)을 계속해서 반복한다.


C

텍스트 파일 활용

  • 프로그램 구조체차트


C

텍스트 파일 활용

  • 프로그램 작성

    • 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)


C

텍스트 파일 활용

  • 2 단계

    • 다음 입력 조건에 대한 결과를 작성하여 보자

선택 1 결과 :

선택 2 결과 :

선택 3 결과 :

선택 4 결과 :


C

텍스트 파일 활용

  • 입력 조건에 대한 결과 작성 (계속)


C

이진 파일 활용

실습시간 – 2 교시


C

이진 파일 활용

  • 학습개요

    • 구조체를 이용한 이진 파일 활용방법을 익힌다.

    • 이진파일 관련 함수의 사용법을 이해한다.

    • 도서정보 검색 프로그램을 작성한다.


C

이진 파일 활용

  • 도서정보 검색 프로그램

    • 문제 정의

      • 한 서점에서 보유한 책에 대한 정보를 제공하는 프로그램을 만들려고 한다. 프로그램 시작 시 서점에 보유한 책의 리스트를 보여주고 해당 목록번호를 입력 시 그 책에 대한 자세한 정보를 제공할 수 있도록 작성하여 보자. 프로그램 시작 시 책에 대한 리스트 정보와 세부정보가 이진 파일로 저장되어지고 이 저장된 내용을 이용해 검색할 수 있도록 프로그램을 작성하여라.

    • 입/출력 조건

      • 입력 조건

        • 세부정보를 원하는 책의 목록 번호

      • 출력 조건

        • 목록 번호에 대한 책의 세부 내용 출력


C

이진 파일 활용

  • 관련 함수 및 식

    • 1. 목록리스트와 이 리스트에 대한 세부 정보가 프로그램 시작 시 만들어 진다.

    • 2. 목록리스트와 세부정보는 구조체 형태를 가지며 이진 형태로 저장된다.

    • 3. 목록 리스트의 구조체

    • 4. 세부 정보에 대한 구조체

    • 5. 세부 정보들은 목록 순서로 파일에 저장된다.


C

이진 파일 활용

  • 알고리즘 (또는 플로우차트)

    • 1. 데이터를 초기화 한다.

      • 1.1 목록 리스트를 만든다.

      • 1.2 만들어진 목록리스트를 파일로 저장한다.

      • 1.3 목록에 대한 세부정보들을 만든다.

      • 1.4 세부정보를 파일로 저장한다.

    • 2. 검색 대상 선택

      • 2.1 목록 리스트 파일로부터 리스트를 읽어와 화면에 출력

      • 2.2 세부정보를 원하는 도서 목록 번호 입력

    • 3. 세부 목록 출력

      • 3.1 도서 목록 번호로 읽어올 세부 정보 선택

      • 3.2 세부 정보 출력

    • 4. 계속할 것인지 아닌지 여부 확인

      • 4.1 계속 수행 할 경우 1,2,3번을 반복한다.

      • 4.2 계속 수행 하지 않을 경우 프로그램 종료


C

이진 파일 활용

  • 프로그램 구조체차트


C

이진 파일 활용

  • 프로그램 작성

    • 1 단계

      • 위에서 분석된 내용을 기반으로 페이지 359에 존재하는 프로그램의 빈 부분을 완성하고 프로그램을 작성한 후 booksearch.c 파일로 저장하자.

①. displayDetail(num)

②. list,sizeof(LIST),5,fp1

③. details,sizeof(DETAIL),5,fp2

④. fopen("list.bin","rb")

⑤. &line,sizeof(LIST),1,fp

⑥. fp,num*sizeof(DETAIL),SEEK_SET


C

이진 파일 활용

  • 2 단계

    • 아래의 입력데이터에 대한 출력 결과를 작성해 보자.


C

The End.

파일 입출력


  • Login