본문 바로가기

전자 공학/C언어 C++

[C언어 독학하기] 20. 파일 입출력 (fopen_s)

반응형

 

 

 

안녕하세요. 취업한 공대누나입니다.

오늘은 파일 입출력에 대한 이야기를 해보도록 하겠습니다.

 

 

1. 파일의 종류

 

크게 텍스트 파일과 바이너리 파일로 나눌 수 있습니다.

사람이 읽을 수 있느냐 없느냐로 구분되는데,

사람이 알 수 있는 규칙을 통해 기록된 파일, 즉 문자로서 우리가 읽을 수 있는 파일을 텍스트 파일이라고 하고,

의미를 알 수 없는 데이터들이 나열된 것을 우리는 바이너리 파일이라고 합니다.

 

 

2. 파일을 다루는 순서

 

1) 대상 파일을 엽니다.

2) 파일 포인터를 이용해서 우리가 원하는 목적에 맞춰 파일을 읽고 씁니다.

3) 조작이 끝나고 파일을 닫아줍니다.

 

간단하게 감을 익히기 위해 먼저 대략적인 흐름을 기술해보도록 하겠습니다.

 

FILE *fp;

-> 파일포인터 fp를 선언하였습니다.

 

fp = fopen("test.txt", "r");

-> test.txt를 읽기 전용으로 open 합니다.

여기서 r은 읽기 전용

w는 쓰기 전용

a는 추가하여 쓰는 모드입니다.

 

fclose(fp);

-> 파일을 닫아줍니다.

 

이해가 잘 되지 않아도 익숙해지시면 이해하기 수월해집니다.

위와 같은 것들을 이용해서 파일을 열고, 읽고, 닫아주는 구나 라는 감을 익혀주시면 됩니다.

 

3. 파일 읽기

 

이제 본격적으로 파일을 읽어보도록 하겠습니다.

 

본격적으로 파일을 읽기 전에 두개의 함수를 먼저 설명하고 가도록 하겠습니다.

 

*fgets()*

데이터를 한 줄씩 읽어들일 때는 fgets()라는 함수를 이용합니다.

fgets()라는 함수를 이용해서 파일을 읽어보도록 하겠습니다.

 

*feof()*

파일의 끝을 만나면 feof() 함수는 true를 돌려주게 됩니다.

이 함수를 이용하여 파일의 끝을 판단하도록 합니다.

 

예제를 보도록 하겠습니다.

 지금은 읽는 예제이며 읽을 파일이 있어야 합니다.

우선 읽을 텍스트 파일을 저장합니다.

저는 아래와 같이 작성했습니다.

 

 

파일의 경로는 Project가 있는 경로와 같습니다.

Project가 바탕화면에 없는데 바탕화면에다 텍스트 파일을 만들어 놓고 왜 안되지?! 하시면 안됩니다.

 

저는 텍스트 파일을 위와 같이 저장해두었습니다.

 

우선 파일 포인터 fp를 선언해주었습니다.

그리고 text라는 배열을 만들어서 읽을 공간을 만들어주었습니다.

fopen_s 함수의 사용법은 위와 같습니다.

fopen과는 다른 점 주의해주세요

 

읽어들일 파일이 없거나 권한 문제로 실패하게 되면 fopen_s 함수는 NULL을 반환하게 됩니다.

따라서 open 실패했을 경우 소스 코드를 입력해 주었습니다.

 

그리고 while 문은 함수가 끝이 나게 되면 break에 걸려서 종료하도록 되어 있습니다.

 

데이터를 한 줄씩 읽어 text에 저장을 하고 그 값을 출력해주었습니다.

실행 결과는 아래와 같습니다.

 

잘 읽힌 것을 확인할 수 있습니다.

 

다음 시간에는 텍스트 파일을 직접 만들어보도록 하겠습니다.

감사합니다.

반응형