※요약

fscanf : 개방된 파일에서 변수 단위로 입력을 받는다.



※특징

변수 간의 구분은 공백, 탭, 개행 문자로 한다.

*는 값을 읽지 않고 건너뛸 때 사용한다.

파일 포인터는 자동으로 증가한다.



※함수 원형 및 설명

int fscanf( FILE *stream, const char *format [, argument].. );
//stream : 개방된 FILE 구조체의 포인터
//format : 형식 제어 문자열
//argument : 가변적인 매개변수
//반환값 : 읽혀진 필드의 수. 파일 끝 또는 에러 시 EOF(-1)



※예제


읽을 파일 Text.txt


#include <stdio.h>

int main( )
{	
	FILE *pFile = NULL;

	pFile = fopen( "d:\\Text.txt", "r" );
	if( pFile == NULL )
	{
		//에러 처리
	}
	else
	{
		int nCount;
		float fRatio;
		char strDesc[255];

		while( !feof( pFile ) )
		{
			//공백으로 분리된 파일 읽기
			fscanf( pFile, "%d %f %s\n", &nCount, &fRatio, strDesc );
			printf( "공백으로 분리 : %d %f %s\n", nCount, fRatio, strDesc );
			
			//,로 분리된 파일 읽기
			fscanf( pFile, "%d, %f, %s\n", &nCount, &fRatio, strDesc );
			printf( ",로 분리 : %d, %f, %s\n", nCount, fRatio, strDesc );

			//탭으로 분리된 파일 읽기
			fscanf( pFile, "%d\t%f\t%s\n", &nCount, &fRatio, strDesc );
			printf( "탭으로 분리 : %d\t%f\t%s\n", nCount, fRatio, strDesc );

			//선별적으로 읽기 - [%*]을 사용하면 값을 읽지 않는다.
			fscanf( pFile, "%*d %*f %s\n", strDesc );
			printf( "선별적으로 읽기 : %s\n", strDesc );
		}

		fclose( pFile );
	}

	return 0;
}


※요약

fputs : 개방된 파일에 문자열을 라인 단위로 씁니다.



※특징

개행 문자 '\n'을 자동으로 0x0D, 0x0A 값으로 변환한다.



※함수 원형 및 설명

int fputs( const char *string, FILE *stream );
//string : 파일에 쓸 NULL로 끝나는 문자열 버퍼의 포인터
//stream : 개방된 FILE 구조체의 포인터
//반환값 : 설공 시 0이나 양수, 실패 시 EOF(-1)




※예제

#include <stdio.h>

int main( )
{	
	FILE *pFile = NULL;

	pFile = fopen( "d:\\Text.txt", "w+" );
	if( pFile != NULL )
	{
		for( int i=0 ; i<5 ; ++i )
		{
			int nResult = fputs( "라인 단위 파일 쓰기 fputs\n", pFile );
			printf( "%d번째 라인 쓰기 %s\n", i+1, nResult != -1 ? "성공":"실패" );
		}
		fclose( pFile );
	}
	else
	{
	}

	return 0;
}




※요약

fgets : 개방된 파일에서 텍스트 문자열을 한 줄씩 읽습니다.



※특징

 - 파일 끝이나 개행 문자까지 읽는다.

 - 라인 끝(CR/LF)을 읽으면 개행 문자 '\n'으로 변환한다.

 - string 끝에 NULL문자를 추가한다.



※함수 원형 및 설명

char *fgets( char *string, int n, FILE *stream );
//string : 파일 데이터를 읽어서 저장할 버퍼의 포인터
//n : 읽을 최대 문자의 수 +1, 읽은 문자열의 끝에 NULL이 추가
//stream : 개방된 FILE 구조체의 포인터
//반환값 : 읽은 string의 포인터, 더 읽을 파일이 없거나 에러 시 NULL 포인터



※예제

#include <stdio.h>

int main( )
{
	FILE *pFile = NULL;

	pFile = fopen( "d:\\Text.txt", "r" );
	if( pFile != NULL )
	{
		char strTemp[255];
		char *pStr;

		while( !feof( pFile ) )
		{
			pStr = fgets( strTemp, sizeof(strTemp), pFile );
			printf( "%s", strTemp );
			printf( "%s", pStr );
		}
		fclose( pFile );
	}
	else
	{
		//에러 처리
	}

	return 0;
}


※txt파일 내용

첫 번째줄입니다.

두 번째줄입니다.

세 번째줄입니다.




※요약

fopen : 파일에 대한 입력 및 출력을 합니다.

fclose : fopen함수로 개방한 파일을 닫습니다.


※함수 원형 및 설명

FILE *fopen( const char *filename, const char *mode );
//filename : 개방할 파일의 경로 및 파일명
//mode : 파일 접근 권한(읽기 전용, 쓰기 전용 등 아래 표 참고)
//반환값 : 개방된 파일의 FILE 구조체 포인터, 실패시 NULL포인터

int fclose( FILE *stream );
//stream : 개방된 FILE 구조체의 포인터
//반환값 : 성공 시 0, 실패 시 -1(EOF)



※모드 설명

 모드

 설명

읽기만 가능하며 파일이 존재해야 한다.

존재하지 않을 경우 에러가 리턴된다.

 w

쓰기만 가능하며 파일을 생성한다.

파일이 존재하면 그 파일을 지우고 생성한다.

 a

파일 끝에 추가만 가능하며 

파일이 존재하지 않으면 파일을 새로 생성한다. 

 r+

읽기, 쓰기 모두 가능하며 파일이 존재해야 한다. 

존재하지 않을 경우 에러가 리턴된다.

 w+

 읽기, 쓰기 모두 가능하며 파일을 생성한다.

파일이 존재하면 그 파일을 지우고 생성한다.

 a+

파일을 읽어서 파일 끝에 추가만 가능하다.

파일이 존재하지 않으면 파일을 새로 생성한다. 

 t

 파일을 text 모드로 개방한다. 

입력 시, CF/LF를 “\n”으로 자동 변환하고 

출력 시에는 “\n”을 CF/LF로 자동 변환한다.

t나 b 생략시 텍스트 모드로 개방된다.

 b

 파일을 이진(binary) 모드로 개방한다.

개행 문자 “\n”을 변환없이 그대로 읽고 쓴다.

파일 개방 시 기본 모드는 텍스트 모드인 t모드입니다.

고로 r은 rt와 같고 r+는 r+t와 같습니다.



※모드 조합

 모드

읽기

쓰기

추가

 텍스트 모드

r / rt

w / wt

a / at

 텍스트 갱신 모드

r+ / r+t

w+ / w+t

a+ / a+t

 이진 모드

rb

wb

ab

 이진 갱신 모드

r+b

w+b

a+b



※모드표

모드

읽기

쓰기

갱신

파일 없을 시

파일 생성

파일 존재 시

삭제 여부

fseek함수

사용 여부

r

O

X

X

X

X

O

r+

O

O

O

X

X

O

w

X

O

O

O

O

O

w+

O

O

O

O

O

O

a

X

O(*)

X

O

X

X(*)

a+

O

O(*)

X

O

X

O

모드 a, a+는 현재의 FILE 포인터 위치에 관계없이 항상 파일 끝에 씁니다.

그러므로 fseek함수로 FILE 포인터 위치를 바꿔도 소용이 없으며, a+모드일 때 읽을 위치만을 설정합니다.

기존 파일을 삭제하지 않고 수정하려면 r+모드로 하면 됩니다.



※예제

#include <stdio.h>

int main( )
{
	FILE *pFile = NULL;

	pFile = fopen( "d:\\text.txt", "w+t" );
	if( pFile != NULL )
	{
		fputs( "테스트 입니다.", pFile );
		fclose( pFile );
	}
	else
	{
		//에러 처리
	}

	return 0;
}


+ Recent posts