프로그래밍 언어에서 파일 처리는 프로그램이 메모리와 상호작용하며 파일에 접근하고 그 안의 데이터를 가져오는 데 매우 중요한 역할을 합니다.
프로그램을 활용하면 파일에서 데이터를 읽어오거나, 파일에 데이터를 쓰는 등 다양한 작업을 수행할 수 있습니다.
이 글에서는 그중에서도 파일로부터 데이터를 읽어오는 방법에 대해 살펴보겠습니다.
파일을 열어야 하는 이유
프로그래밍에서 어떤 작업을 수행하기 전에는 반드시 먼저 파일을 열어야 합니다. 그리고 프로그래밍 언어에는 파일을 여는 여러 가지 모드가 존재하며, 파일에 대한 접근 방식은 어떤 모드로 파일을 열었는지에 따라 결정됩니다.
여기서는 파일을 읽기 위해 사용되는 두 가지 모드인 r과 r+의 차이점에 대해 자세히 알아보겠습니다.
두 모드 모두 프로그램에서 파일을 읽는 데 사용된다는 공통점이 있습니다.
파일 열기 기본 문법
FILE *fp;
fp = fopen("filename.fileextension", "mode");
r 모드로 파일 열기
r 모드는 파일을 읽기 전용으로 엽니다. 만약 지정한 파일이 존재하지 않으면 fopen 함수는 NULL을 반환합니다.
예제 코드
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
FILE* readFile;
char ch;
readFile = fopen("file.txt", "r");
while (1) {
ch = fgetc(readFile);
if (ch == EOF)
break;
cout<<ch;
}
fclose(readFile);
}
실행 결과
Tutorials Point
r+ 모드로 파일 열기
r+ 모드는 r 모드와 유사하지만 몇 가지 추가 기능이 있는 모드입니다. 이 모드는 파일을 읽기와 쓰기를 동시에 수행할 수 있도록 엽니다.
단, 주의할 점은 r+ 모드 역시 파일이 존재하지 않으면 fopen이 NULL을 반환하며 새 파일을 생성하지 않는다는 것입니다. 파일이 없을 경우 새 파일을 생성하면서 읽고 쓰기를 모두 하려면 w+ 모드를 사용해야 합니다.
예제 코드
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
FILE* readFile;
char ch;
readFile = fopen("file.txt", "r+");
while (1) {
ch = fgetc(readFile);
if (ch == EOF)
break;
cout<<ch;
}
fclose(readFile);
}
실행 결과
Tutorials Point
r과 r+ 모드 비교 요약
- r 모드: 읽기 전용으로 파일을 열며, 파일이 존재하지 않으면 NULL을 반환합니다.
- r+ 모드: 읽기와 쓰기를 모두 지원하며, 파일이 존재하지 않으면 NULL을 반환하고 새 파일을 생성하지 않습니다.
- w+ 모드: 읽기와 쓰기를 모두 지원하며, 파일이 존재하지 않으면 새 파일을 생성합니다.
파일을 단순히 읽기만 한다면 r 모드로 충분하지만, 읽은 내용을 바탕으로 파일을 수정해야 하는 경우에는 r+ 모드를 사용하는 것이 적합합니다.