[C언어-막코딩] 27장 파일 입출력

in #kr-dev5 years ago (edited)

[C언어-막코딩] 27장 파일 입출력



이제 C언어 기초 문법 내용이 거의 끝나 가는 군요. 오늘 다룰 내용은 파일 입출력입니다. 외부 데이터 파일을 읽어와서 처리하는 방법을 간단히 소개를 하도록 하겠습니다.

1. 파일 입출력


파일처리에 대한 간단히 아래와 같이 정리 했네요.


a1.jpg

파일처리는 FILE로 객체 변수를 선언하게 됩니다.

fp = fopen(“경로+파일명","모드");

그다음 fopen()과 fclose()로 파일을 오픈과 종료를 나타냅니다. 파일을 열었으면 파일을 닫아야 겠죠. 이렇게 파일 변수에 대해 열기와 닫기는 한쌍을 이루어 파일 처리를 구역을 표현 할 수 있습니다.

fopen()함수는 두개의 인자로 앞에는 파일명만 있으면 현재 프로그램이 실행되는 위치에 파일을 지정하게 됩니다. 현재 위치가 아니면 파일 경로와 파일명을 합쳐서 인자값으로 하면 해당된 위치에 파일을 선택하게 됩니다. 두번째 인자는 모드입니다. 파일을 읽기(r), 쓰기(w), 추가(a) 할 것인지를 선택하게 됩니다. 그리고 기본은 텍스트 입출력입니다. 모드에서 텍스트(t), 바이너리(b)로 구분하여 파일처리를 할 수 있는데 기본 텍스트로 파일을 처리가 주로 이루어지기 때문에 바이너리모드는 있다는 정도 이해하시고 넘어가세요. 기본 r, w, a라고 표현해도 되고요. rt,wt,at로 해도 됩니다.

파일을 fopen() 했다면 읽기 모드이면 파일을 읽어 와야 합니다 . fgetc(), fgets(), fscanf() 함수를 이용하면 됩니다. getc(), gets(), scanf()은 콘솔창에서 입력을 받을 때 사용하던 함수인데 앞에 f자를 붙여서 파일 입력함수로 정의되어 있습니다. 단일문자, 문자열으로 파일에 있는 데이터를 읽어 올 수 있습니다.

fopen()함수가 쓰기 모드이면 파일을 쓰게 됩니다. 콘솔창에서 표현하던 putc(), puts(), printf()함수 표현에서 f자가 붙여서 fputc(), fputs(), fprintf() 출력 함수명으로 정의 되어 있습니다. 콘솔과 파일에서의 출력 처리 의미는 동일하니깐 그대로 사용하시면 됩니다.

코딩을 다 실험하면 너무 길어지니깐 간단하게 문장을 쓰기, 읽기, 추가 순으로 원리만 실험하도록 하겠습니다.

2. 코딩


파일 처리 함수는 위에서 간단히 기초 함수만 정의해 놓았습니다. 원래 파일 관련 함수가 다양하고 초반에 다 다루면 머리만 복잡하기 때문에 간단히 기존에 아는 함수들을 이용하여 파일 처리를 해보도록 하겠습니다.

[전체소스]

#include <stdio.h>
#include <windows.h>

int main(int argc, char *argv[]) {
    
    FILE *fp;
    char ch;
    char buffer[20];
    
    //파일 쓰기 
    fp = fopen("D:\\text.txt","wt");    
    if(fp!=NULL){
        fputc('c',fp);
        fputs("SteemIt World! \n",fp);              
        fclose(fp); 
    }
    else{
        printf("ERROR \n");
    }   
    
    //파일 추가 
    fp = fopen("D:\\text.txt","at");    
    if(fp!=NULL){   
        fprintf(fp,"Hello World! \n");      
        fclose(fp); 
    }
    else{
        printf("ERROR \n");
    }   
    
    //파일 읽기 
    fp = fopen("D:\\text.txt","rt");    
    if(fp!=NULL){
        ch=fgetc(fp);
        printf("%c \n",ch);
        fgets(buffer, sizeof(buffer), fp);
        printf("%s \n",buffer);
        fread(buffer, sizeof(buffer), 1, fp);
        printf("%s \n",buffer);     
        fclose(fp); 
    }
    else{
        printf("ERROR \n");
    }       
    
    system("pause");
    
    return 0;
}   

코딩 부분을 읽어 보시면 됩니다. 참고로 fread()함수라는 파일 함수가 있는데 이 함수는 문자열을 원하는 크기 만큼 읽을 수 있는 함수입니다.

fread(문자열변수,크기,횟수,파일변수)

이렇게 구성되어 있는데 원하는 크기만큼 문자열 변수에 저장하게 됩니다. 이 함수정도는 추가로 알아 두시면 좋을 것 같아서 코딩에 넣었네요. 위 코딩에서는 fscanf()함수를 이용 안했는데 추가해서 테스트 해보시기 바랍니다.

fscanf(fp,"%s",buffer);

이렇게 읽을 수 있는데 참고로 문자열을 NULL문자 전까지 읽어옵니다.

[결과]
a2.jpg

결과를 보시면 텍스트 파일에 저장 된 모습을 보실 수 있고 다시 읽을 때 정상적으로 파일에서 읽어왔는지 확인 할 수 있을 겁니다.

마무리


읽기를 할 때는 해당 파일이 없을 경우는 에러가 발생합니다. 그리고 쓰기를 할 때는 해당 파일이 없으면 새로 파일을 생성하고 해당파일이 있으면 기존 파일에 덮어 씌우게 됩니다 w모드로 할 때는 기존 파일에 덮어 쓰기 때문에 이전 데이터는 사라집니다. a모드로 할 때는 기존 파일에 덮어 쓰는데 기존 저장된 데이터에서 추가해서 데이터가 덮어 쓰기가 됩니다. 이점만 유념하시고 우선 위 기초 파일 처리 표현을 이용하여 파일 처리 방법을 배우시기 바랍니다. 어느정도 이해가 되고 익숙해지면 파일 처리 관련 함수들을 구글 검색을 통해 파일 처림 함수의 사용 법을 배우시기 바랍니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

다반치 Coding ~ ♩♬♬
행복한 ♥ 오늘 보내셔용~^^

Posted using Partiko Android

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.029
BTC 57800.38
ETH 3127.30
USDT 1.00
SBD 2.40