unreal 5기

250903 언리얼엔진 본캠프 22일차 파일1

parkjinnam 2025. 9. 3. 19:53

파일

 

게임을 하면서 내가 진행한 내용이 다 증발한다면 다시는 그 게임을 찾지 않을 것이다. 그렇기에 가장 중요한 것이 세이브, 로드 기능이고 이것 또한 프로그래머가 직접 코딩을 통해서 구현해야 하는 부분이다. 따라서 프로그래머는 파일이 어떻게 생성되고 기록되고 수정되고 로드되는지 알아야 한다.

 

데이터 스트림

스트림은 데이터 스트림의 약자로서 데이터가 흘러들어오는 물줄기를 의미한다. 이러한 스트림은 여러 개 있는데 사용자가 어디서 받아올 건지 처리 후 어디에 흘려보낼 건지 고를 수 있다. 데이터 스트림의 종류는 4가지가 있다.

 

1. stdin 스트림 : 키보드를 통한 입력 데이터 스트림

 

2. stdout 스트림 : 콘솔을 통한 출력 스트림

 

3. File 스트림 : 입출력이 가능한 파일스트림

 

4. String 스트림 : 입출력이 가능한 문자열 스트림.

 

사실 우리는 여태껏 stdin, stdout는 사용해 왔다 stdin을 통해서 데이터를 받아서 stdout으로 데이터를 출력하는 형식으로 사용해 왔다.  스트림은 경계선 너머의 장치인데 stdin, stdout, file, string 등이 버퍼를 통해서 한꺼번에 가져오는 동작이 필요한 경계선 너머의 장치이다. 또한 키보드를 잡고 있는 사람이 만약 악의적으로 'clear memory'를 입력했다고 가정해 보자. 버퍼가 없다면 곧바로 프로그램으로 들어오게 되어 참사가 일어난다. 반대로 버퍼가 있다면 한 번쯤 거를 수 있다.

int fscanf(FILE* stream, const char* format)

 

fscanf()는 스트림을 인자로 전달이 가능하다 stdin을 인자로 전달하면 scanf()와 동일한 기능을 수행한다.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
    int num;

    printf("[scanf()]Enter a number: ");
    scanf("%d", &num);
    printf("num: %d\n", num);

    printf("[fscanf()]Enter a number: ");
    fscanf(stdin, "%d", &num);
    printf("num: %d\n", num);

    return 0;
}

 

해당 코드를 입력하고 실행해 보면 동일한 결과가 출력되는 것을 볼 수 있다.

 

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
    FILE* InputText = fopen("input.txt", "r");

    fclose(InputText);
    InputText = NULL;

    return 0;
}

 

이 코드는 어떠한 기능을 할까? 만약 오류가 발생한다면 아무 내용도 없는 input.txt를 프로젝트 폴더에 만들어둔 다음 실행해 보자 이 코드는 input.txt를 열고 닫는 동작을 수행하기에 해당 파일이 없다면 컴파일 오류를 뱉어낸다.

 

파일 접근 모드와 파일 모드 한정자

프로그래머가 파일 접근 모드와 파일 모드 한정자를 어떻게 짜느냐에 따라 파일에 접근하는 방식을 지정해 줄 수 있다.

 

파일 접근 모드 

1. "r" : 읽기 모드로서 파일이 없거나 찾을 수 없는 경우 실패한다.

 

2. "w" : 쓰기 모드로서 빈 파일이 새로 열리게 된다. 파일이 이미 있다면 해당 파일의 내용은 삭제된다.

 

3. "a" : 새 데이터를 파일에 쓰기 전에 EOF 표식을 제거하지 않고 파일에 끝에 쓰게 한다. 파일이 없는 경우 새로 만든다.

 

4. "r+" 읽고 쓰기 모드이다. 파일이 반드시 있어야 한다.

 

5. "w+" 읽고 쓰기 위해 빈 파일이 열린다. 파일이 이미 있으면 기존 파일의 내용은 삭제된다.

 

6. "a+" : 읽고 추가하기 위해 파일이 열린다.

 

파일 모드 한정자 : 파일 접근 모드에 붙여서 사용한다. (ex : rb, wt,...)

1. "t" : 텍스트 모드로 파일이 열린다.

 

2. "b" : 이진 패턴 모드로 파일이 열린다.