Coding & Programming/C, C++

[C/C++] 텍스트 파일로 부터 한 글자(바이트)씩 읽고, 한 줄씩 읽어서 화면에 출력하기(read one character (byte) fr

mainCodes 2021. 3. 4. 05:49

[C/C++] 텍스트 파일로 부터 한 글자(바이트)씩 읽고, 한 줄씩 읽어서 화면에 출력하기(read one character(byte) from a text file, line by line, and print it to the screen : fgetc(), fgets(), putchar() functions example)

 

안녕하세요 JollyTree(•̀ᴗ•́)و입니다.  파일의 내용을 읽는 방법은 여러가지가 있습니다. 그 중에서 fgetc(), fgets() 함수는 파일포인터(FILE*)를 이용하는 함수로 FILE *fp = fopen()의 fp를 파라미터를 이용합니다.

 

아래 예제는 파일을 오픈한 뒤 한 문자씩 읽어서 EOF 일때까지 반복하는 코드와 여러 줄로 된 텍스트 파일을 라인단위로 한 줄씩 읽어서 화면에 출력하는 내용을 포함하고 있습니다. 간단하지만 텍스트 파일을 읽어야 할 때 자주 사용되는 코드입니다.

 

예제(Example):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
 
#define FILE_NAME "maincodes.txt"
 
int main()
{
    FILE* fp = NULL;
    int ch;
    char buf1[256= "";
    char* buf2 = NULL;
 
    printf("한 문자(바이트)씩 읽기\n");
    fp = fopen(FILE_NAME, "r");
    if (fp == NULL)
    {
        printf("오픈 에러\n");
        exit(0);
    }
    do
    {
        ch = fgetc(fp); //한 문자 읽기
        putchar(ch);    //읽은 한 문자 화면에 출력
 
    } while (ch != EOF);
 
    fclose(fp);
 
    printf("\n\n텍스트 파일 내용 한 줄씩 읽기\n");
    fp = fopen(FILE_NAME, "r");
    if (fp == NULL)
    {
        printf("오픈 에러\n");
        exit(0);
    }
 
    while (true)
    {
        buf2 = fgets(buf1, 256, fp); //한 줄씩 읽기
        if (buf2 == NULL)
            break;
        printf("%s", buf1);
    }
    fclose(fp);
 
    return 0;
}
cs

 

실행결과(Output):

 

 

위 예제에서는 256바이트씩 고정해서 읽게 되어 있는데, 파일의 크기를 미리 구한다면 256바이트가 아닌 지정된 크기의 블럭 단위로도 읽을 수 있습니다. 파일의 크기를 구하는 자료는 아래 링크를 참고하세요.

 

- stat() 함수로 파일 크기 구하기 : https://maincodes.tistory.com/6

- fseek(), ftell() 함수로 파일 크기 구하기 : https://maincodes.tistory.com/14

 

이상 JollyTree였습니다. (•̀ᴗ•́)و 꾸벅!