공부 자료실/C언어

C언어 - 파일 입출력

자료수집중 2020. 8. 5.
반응형

 

 

C언어의 코드를 작성 후 실행해서 나온 결과는 결국 실행을 종료하면 사라지게 됩니다.

그래서 결과를 저장하는 방법 중 하나인 파일 입출력에 대해서 알아보겠습니다.

 

 

fopen()

먼저 파일을 열거나 새로 만들기 위해서 사용하는 함수의 원형은 다음과 같습니다.

 

FILE *fopen(const char *name, const char *mode)

 

fopen은 파일의 정보를 FILE 포인터로 반환합니다. (FILE은 stdio.h에 선언되어있는 구조체 자료형입니다.)

파일을 열 때 실패하면 NULL을 반환합니다.

const char *name는 파일의 경로입니다.

파일 이름만 적게 되면 현재 프로젝트가 저장된 경로가 기본으로 지정됩니다.

특정 파일을 찾아서 열고 싶다면 파일 경로를 직접 입력하면 됩니다.

ex) "D:\\Test\\test.txt"

 

 

const char *mode은 파일 처리 방식입니다.

기본적으로 파일 처리 방식은 문자열로 표시합니다.

 

만약 쓰기모드에 텍스트 파일 타입이면 "w"만 적어주면 됩니다.

하지만 바이너리 파일은 "wb" "wb+" 로 입력해야 합니다.

읽기 쓰기가 동시에 가능한 +는 그냥 사용하면 이상한 값이 나올 수 있습니다.

그래서 rewind(), fseek() 등을 호출해서 파일 위치 지정자(커서의 위치)를 다시 해야 합니다.

대표적인 rewind()와 fseek()만 짧게 알아보면

rewind(FILE *stream)

 

int fseek(FILE* stream, long int offset, int origin);

 

rewind는 파일의 위치 지정자를 맨 처음으로 설정합니다.

fseek는 파일의 위치 지정자를 원하는 위치에 설정할 수 있습니다.

origin은 파일 위치 지정자의 시작 위치입니다.

매크로 상수인 SEEK_SET(처음 시작), SEEK_CUR(현재위치), SEEK_END(끝)의 매크로를 입력 가능합니다.

offset은 orgin에서 얼마나 이동할지의 값을 입력합니다. 바이트 단위로 움직임으로 영어는 한 단어입니다.

 

 

 

fclose()

fopen()으로 연 파일을 닫아줍니다.

읽기, 쓰기를 수행 후 마지막에 사용합니다.

 

 

 

 

 

 

이제 데이터를 입출력하는 함수를 알아보겠습니다.

fputc(), fgetc()

각각 함수원형은 다음과 같습니다.

int fputc(int c, FILE* stream);

 

int fgetc(FILE* stream);

문자 단위로 파일에 입력과 출력이 가능합니다.

현재 표시자의 위치에 입력과 출력을 하며 한 문자를 입력하거나 출력하게 되면 표시자가 한 칸 증가합니다.

#include <stdio.h>

int main(void) {

	FILE* fp;
	fp = fopen("test.txt", "w+");
	char value;
	
	if (fp == NULL) {
		printf("파일없음 \n");
	}
	else {
		printf("파일있음 \n");
		fputc('c', fp);
		rewind(fp);
		value = fgetc(fp);
		printf("%c \n", value);
		fclose(fp);
	}

	return 0;
}

 

 

fgets(), fputs()

각각 함수원형은 다음과 같습니다.

int fputs(const char* str, FILE* stream);
char* fgets(char* str, int num, FILE* stream);

문자열 단위로 파일에 입력과 출력이 가능합니다.

#include <stdio.h>

int main(void) {

	FILE* fp;
	fp = fopen("test.txt", "w+");
	char value[20];
	fputs("hello world", fp);
	fseek(fp, 0, SEEK_SET);
	fgets(value, 20, fp);
	printf("%s \n", value);
	fclose(fp);

	return 0;
}

 

 

fprintf(), fscanf()

각각 함수 원형은 다음과 같습니다.

int fprintf(FILE* stream, char const * const _Format, ...)
int fscanf(FILE* stream, char const * const _Format, ...)

파일에 입력과 출력을 형식에 맞춰서 읽어 옵니다.

기본 형식은 printf와 scanf와 유사합니다.

#include <stdio.h>

int main(void) {

	FILE* fp;
	fp = fopen("test.txt", "w+");
	int num;
	fprintf(fp, "a = %d", 1);
	fseek(fp, 4, SEEK_SET); //처음에서 4바이트 이동
	fscanf(fp, "%d", &num);
	printf("%d \n", num);
	fclose(fp);

	return 0;
}

 

 

remove()

remove(FILE* stream)

파일을 삭제 합니다.

댓글