본문 바로가기
Language/C언어

C021_파일 쓰고 읽기

by OdOp 관리자 2023. 9. 23.
SMALL

파일을 읽거나 쓰기 위해서는 파일을 열어야 합니다. 

FILE *포인터이름 = fopen(파일명, 파일 모드);

파일 모드에는 여러 개의 모드가 있습니다. 

r : 읽기 전용 (파일이 반드시 존재해야 사용할 수 있습니다. )
w : 쓰기 전용 (파일이 존재하면 덮어쓰게 됩니다.)
a : 추가 (파일을 열어서 파일 끝에 값을 이어 쓸 수 있게 해 줍니다. 파일이 만약 없다면 파일을 생성해 줍니다. )
r+ : 일기 / 쓰기 (파일이 반드시 있어야 합니다.)
w+ : 읽기 / 쓰기 (파일이 없으면 생성하고 파일이 있으면 덮어씁니다.)
a+ : 추가 (읽기 / 쓰기)
t : 텍스트 모드 (파일을 읽거나 쓸 때 개행 문자 \n을 \r\n로 변환합니다.)
b : 바이너리 모드 (파일 내용을 그대로 읽고, 값을 그대로 씁니다.)

한 번 읽어보시고 기억 안 나실 때마다 찾아보시면 좋을 것 같습니다. 

 

파일 쓰기

#include <stdio.h>

int main()
{
    FILE* fp = fopen("hello.txt", "w");  //hello.txt 파일을 쓰기 모드(w)로 열기
    //파일 포인터를 반환 
    fprintf(fp, "%s %d\n", "Hello", 100);  //서식을 지정하여 문자열을 파일에 저장
    fclose(fp);  //파일 포인터 닫기
    return 0;
}

파일 쓰기입니다. 

우선 파일을 열어야겠죠. 앞에서 설명드린 것과 같은 방식으로 진행되었습니다. 

FILE* fp = fopen("hello.txt", "w");

hello.txt를 쓰기 모드로 열었습니다. 만약 파일이 존재한다면 새롭게 덮어써서 만드는 것이지요.

열었으니 이제 써야겠죠.

fprintf(fp, "%s %d\n", "Hello", 100);

fprintf를 사용하여 파일을 쓰게 됩니다. fprintf의 기본적인 틀을 알려드리겠습니다. 

fprintf(파일 포인터, 서식, 값1, 값2, ...);

이러한 형태로 작성이 되게 합니다. 하나하나 살표 보죠.

파일 포인터에 fp를 넣었습니다. 저희가 앞에서 선언한 파일 포인터이죠.

서식이 입력되는 형태입니다. 저희는 문자열 숫자 그리고 개행 문자 이렇게 파일에 쓰고 싶습니다. 그러면 '%s %d\n'와 같은 형태가 될 것입니다.

마지막으로 각 서식에 해당되는 값을 적어줍니다. 문자열은 "Hello", 정수형은 100 이렇게 말이죠.

이때 잘 작성이 되었다면 작성한 문자열의 길이를 반환하고 실패하면 음수를 반환합니다.

이제 적고 싶은 내용을 다 적었으니 더 이상 파일을 계속 열어 놓을 필요가 없겠죠.

fclose(fp);

파일 포인터를 위와 같이 닫습니다. 성공하면 0을 반환하고 실패하면 EOF를 반환합니다. 

EOF는 End Of File이라는 뜻으로 파일의 끝을 표현하기 위해 정의해 놓은 상수입니다. (-1 값을 가지고 있습니다.)

함수 호출이 실패되었을 때에 반환합니다. 

 

이제 적었으니 한 번 읽어보도록 하겠습니다. 

 

파일 읽기

#include <stdio.h>

int main()
{
    int num1;
    char s1[10];

    FILE* fp = fopen("hello.txt", "w");
    //파일 포인터를 반환 
    fprintf(fp, "%s %d\n", "Hello", 100);
    fclose(fp);
    FILE* fp1 = fopen("hello.txt", "r");  //hello.txt 파일을 읽기 모드(r)로 열기, 파일 포인터를 반환
    fscanf(fp1, "%s %d", s1, &num1);  //서식을 지정하여 파일에서 문자열 읽기
    printf("%s %d\n", s1, num1);  //파일에서 읽은 값을 출력
    fclose(fp1);  //파일 포인터 닫기
    return 0;
}

 

우선 마찬가지로 파일을 열어주는데 이번에는 읽기 모드로 열도록 하겠습니다. 

FILE* fp1 = fopen("hello.txt", "r");

이제 파일을 읽을 준비가 되었습니다. 

fscanf(fp1, "%s %d", s1, &num1);

fscanf를 사용하여 파일을 읽게 됩니다. fscanf의 기본적인 틀을 알려드리겠습니다.

fscanf(파일 포인터, 서식, 변수의 주소1, 변수의 주소2, ...);

이러한 형태로 작성이 되게 합니다. 하나하나 살표 보죠.

파일 포인터에 fp1를 넣었습니다. 저희가 앞에서 선언한 파일 포인터이죠.

서식이 작성된 형태입니다. 저희는 문자열 숫자 형태로 된 부분을 읽고 싶습니다. 그러면 '%s %d'와 같은 형태가 될 것입니다. 

마지막으로 각 서식에 해당되는 변수의 주소를 적어줍니다. 문자열은 s1, 정수형은 num1 이렇게 말이죠.

이제 적고 싶은 내용을 다 적었으니 더 이상 파일을 계속 열어 놓을 필요가 없겠죠.

fclose(fp1);

 

 

이렇게 파일을 쓰고 읽어보았습니다. 잘 정리하셔서 하시는 프로젝트가 잘 마무리되셨으면 좋겠습니다.

파이팅!!!!

LIST

'Language > C언어' 카테고리의 다른 글

C023_파일 쓰고 읽기 fread, fwrite  (0) 2023.09.25
C022_파일 쓰고 읽기 fput, fgets  (0) 2023.09.24
C020_함수 포인터  (0) 2023.09.22
C019_재귀 함수 사용하기  (0) 2023.09.21
C018_비트 연산  (0) 2023.09.20