[C/C++] 파일 입출력

XCode로 파일입출력 공부하기

C언어 기억이 하나도 안 나서 특히 안 나는 부분만 공부하려고 한다. 첫번째 순서는 바로 파일 입출력! 그렇게 어렵지는 않다. 파일을 읽기 위해서는 '파일 포인터’를 사용해야 하는데, 선언하는 방법은 다음과 같다.

FILE *fp;

파일 포인터 선언 끝!
하지만 여기서 *pt는 null 포인터이다. 초기화를 해 주어야 한다.

fp = fopen("파일명", "모드");


모드는 기본적으로 세 가지가 있다.

  1. "r" // 읽기 모드

    • 파일이 없을 경우 에러가 발생한다.
  2. "w" // 쓰기 모드

    • 파일이 없으면 생성한다.
    • 파일이 있으면 내용을 덮어씌운다.
  3. "a" // 추가 모드

    • 파일이 없으면 생성한다.
    • 파일이 있으면 맨 뒤에 추가한다.

아무튼, 이렇게 하면 파일 포인터 초기화까지 완료! 이기는 함.
근데 그대로 컴파일하면 아무 일도 일어나지 않는다.
파일의 내용을 printf로 한번 찍어 주는 게 좋을 듯하다 ‘ㅅ’)/

반복문을 사용한다. 파일의 끝은 EOF(end of file)로 판독하면 된다.

1
2
while(fscanf(fp, "%d", &data) != EOF)
printf("%d", data);

int형으로 이루어진 파일을 읽을 것이기 때문에 data는 int형으로 선언했고, 읽어오는 fscanf도 %d로 받았다. 그리고 아주 무난하게 돌렸는데… 파일 포인터인 fp가 null이었다. 두둥.

분명히 소스 코드가 있는 곳에 해당 txt 파일이 존재했는데도 불구, 읽히지 않았다. 이럴 때 답은 뭐? 구글링 ‘ㅅ’!

설마설마 했는데 역시나. 파일 경로를 풀로 적어줘야 하는 것이었다. -ㅅ-…
원래의 내 코드는 다음과 같았다.

아! fopen을 했으면 close도 있겠죠? 파일을 열었으면 꼭 닫아 줍시다!
fclose(fp); 한 줄이면 됩니다!

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(void) {
int data;
FILE *fp;
fp = fopen("sample_input.txt", "r");
while(fscanf(fp, "%d", &data) != EOF){
printf("%d", data);
}
fclose(fp);
return 0;
}

그리고 변경(최종) 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(void) {
int data;
FILE *fp;
fp = fopen("/Users/(블라블라)/Desktop/(블라블라)/Easy/1/1/sample_input.txt", "r");
// 개인 정보를 보호하기 위한 블라블라 처리입니다 '^'*
while(fscanf(fp, "%d", &data) != EOF){
printf("%d", data);
}
fclose(fp);
return 0;
}

이렇게 간단하게 읽어오기는 정말로 끝! 약 2년만에 C 하려니까 잊어버린 게 너무 많다. 잊지 말아야 할 것들을 차근차근 정리하는 버릇을 들여야겠다. 😄


Share