C 언어 - 파일 다루기2 (fopen / fclose)

컴퓨터/C

728x90
반응형

본문을 읽기 전에

 

C 언어 - 파일다루기 1 (파일의 이해)

파일(File)이란 무엇인가? 컴퓨터에서 파일의 개념은 컴퓨터를 사용한 사람들이라면 뭐 두가 알고 있을 것입니다. 이 파일은 컴퓨터의 저장장치에 어떠한 데이터를 담고 있는 녀석을 파일이라고

blog-of-gon.tistory.com

해당 링크를 읽고 파일과 파일 스트림의 개념을 이해하고 오면 더 도움이 됩니다.

 

fopen 함수

fileopen 함수는 파일 구조체 자료형을 이용하여 파일의 스트림을 생성하기 위한 함수라고 말했습니다. 

그렇다면 fileopen함수는 어떻게 구성되어있고 어떻게 사용되는지 한번 알아보도록 하겠습니다.

 

fileopen() 함수의 원형은 아래와 같습니다.

#include <stdio.h>
FILE *fopen(const char* restrict filename, const char* restrict mode);
// fopen(파일의 이름과 경로 , 스트림 모드)

fileopen 함수를 호출하기 위해서는 2가지의 인자가 필요합니다.

  • 불러올 파일의 경로와 이름
  • 생성할 파일 스트림의 모드

fopen - 파일의 경로와 이름

fileopen 함수의 첫 번째 인자는 파일의 경로와 이름이 들어와야 됩니다. 컴퓨터의 저장장치 어딘가에 있는 파일을 선택하거나 어딘가의 파일을 만들기 위해서입니다. 

만약 경로를 지정하지 않는다면 해당 프로그램이 있는 곳과 동일한 곳에 파일이 선택됩니다.

 

fopen - 생성할 파일 스트림의 모드

앞선 포스트에서 파일은 크게 2가지 타입 (바이너리,텍스트)로 구분된다고 하였습니다. 그리고 이 파일을 이어서 쓸 것인지, 처음부터 쓸 것인지, 읽기만 할 것인지 등을 선택해야 됩니다 이런 모드를 선택해야만 정확한 스트림이 생성되어 올바르게 사용할 수 있습니다. 

다양한 모드가 있는데 정리하자면 다음과 같습니다.

 

인자 값(실제 입력 값) 설명 기능 특징
"rt" read text
텍스트 모드 읽기
텍스트 파일의 읽기 t를 생략 가능
즉, "r"만 입력 가능
파일이 없으면 null반환
"rb" read binary
2진 모드 읽기
2진 파일의 읽기 파일이 없으면 null반환
"wt" write text
텍스트 모드 쓰기
텍스트 파일의 쓰기 t생략 가능
파일이 존재하지 않다면
새로만들어진다.
파일의 처음 부분부터 쓴다
"wb" write binary
2진 모드 쓰기
2진 파일의 읽기 파일이 존재하지 않다면
새로만들어진다.
파일의 처음 부분부터 쓴다
"at" append text
텍스트 이어쓰기
텍스트 파일의 이어쓰기 t생략 가능
파일이 존재하지 않다면
새로만들어진다.
파일의 마지막 부분부터 쓴다
"ab" append binary
2진 모드 이어쓰기
2진 파일의 이어쓰기 파일이 존재하지 않다면
새로만들어진다.
파일의 마지막 부분부터 쓴다

이외에 각 모드들에서 +를 붙여 사용하는 확장모드가 있는데 본문에서는 기본적인 부분들만 다루도록 하겠습니다.

여기서 모드 인자별 특징들이 있습니다.

  • 읽기모드는 읽을 파일이 없으면 반환되는 값이 null이다.
  • 쓰기와 이어쓰기 모드는 파일이 존재하지 않는다면 새로 만든다.

이 부분을 꼭 기억하여 소스코드를 작성해 봅시다.

 

fclose 함수

이제 생성된 스트림을 이용하여 파일을 다 사용하였다면 생성된 스트림의 소멸을 시켜주어야 합니다. 이때 사용하는 함수로 함수의 원형은 다음과 같습니다.

#include<stdio.h>
int fclose(FLIE* stream);
// fclose (소멸시킬 stream)

fclose 함수의 경우 파일을 성공적으로 닫으면 0을 반환하고 닫지 못했다면 EOF를 반환 합니다.

 

소스코드로 파일을 열고 닫아봅시다.

#include<stdio.h>
int main()
{
	FILE* file; // 파일을 제어하할 스트림을 만들 공간 선언

	file = fopen("Test.txt", "wt"); // 스트림 정의 및 생성 wt --> w로도 가능
	// 스트림이 정상적으로 생성되지 않았다면 NULL값이 반환 될 것입니다.


	//
	if (file == NULL)
	{
		printf("파일 열기에 실패 하였습니다.\n");
	}
	else
	{
		printf("파일 열기에 성공 했습니다.\n");
		//파일 제어 소스코드 
		//
		//
		//

		//사용 종료 후 파일 스트림 소멸
		if (fclose(file) == 0)
		{
			printf("파일 스트림이 정상적으로 소멸 됬습니다.\n");
		}
		else
		{
			printf("파일 스트림이 소멸되지 않았습니다.\n");
		}
	}
	return 0;
}

아직 파일을 제어하지는 못하지만 소스코드상에 안전하게 파일을 제어하기 위한 스트림을 생성하고 소멸시키는 소스코드를 작성해 보았습니다. 해당 소스코드의 경우 wt모드로 실행되어 정상적으로 프로그램이 구동된다면 해당 Test.txt 파일이 없다면 새로운 Test.txt 파일을 생성할 것입니다.

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :