2012년 3월 1일 목요일
[C] 파일 입출력
일단 파일 쓰기 예제
#include <stdio.h>
int main(void)
{
///< 파일 포인터 선언
FILE* fp = NULL;
int i = 1;
//char c = 'a';
float f = 3.14f;
char pTest[256] = "TEST";
__int64 longlongint = 12345678910;
///< 파일 쓰기 모드로 열기
fp = fopen("현규바보.txt", "w");
///< 파일 포인터 확인 ( 제대로 열었는지 )
if( fp == NULL )
{
printf("파일 열기 실패\n");
return 0;
}
///< 데이터 쓰기
fprintf(fp, "%d\t%f\t%s\t%I64d\n", i, f, pTest, longlongint);
///< 파일 포인터 닫기
fclose(fp);
return 0;
}
fp라는 파일 포인터를 통해 프로그래머가 파일에 접근, 컨트롤하게 된다.
fopen() 에서 파일명만 적어주었는데(파일 이름은 신경쓰지 말자ㅡ,.ㅡ)
이 경우 상대경로로서 작업폴더를 기준으로 파일을 찾는다.
절대 경로를 적어줘도 된다.
그 다음 인자인 "w"는 쓰기 모드로 파일을 연다는 뜻이다.
모드는 아래와 같은 것들이 있다.
rt(또는 r+t) 텍스트 화일 읽기용
wt( " w+t) 쓰기
at( " a+t) 추가붙이기
rb( " r+b) 이진파일 읽기
wb( " w+b) 이진파일 쓰기
ab( " a+b) 이진파일 붙이기
그리고 __int64 자료형은 이름 그대로 64비트 짜리 정수형 타입이다. 기존 long int가 32비트(약 40억) 까지 담을 수 있었던 것에 비해 그보다 훨씬 큰 숫자도 담을 수 있다.
또한 fprintf() 로 쓸 때 이 자료형을 %I64d 로 받아주는 것을 볼 수 있다(대문자 I 이다).
char 형을 일단 주석으로 막아놓은 이유는, 입출력시 char 형을 따로 처리하면 탭문자, 공백문자, 개행문자 등도 하나의 문자로 인식하여 처리가 번잡해지기 때문이다.
결과물 텍스트 파일을 열어서 확인해보고 닫은 뒤
이제는 읽기코드를 실행해보자.
#include <stdio.h>
int main(void)
{
///< 파일 포인터 선언
FILE* fp = NULL;
int i;
//char c;
float f;
char pTest[256];
__int64 longlongint;
///< 파일 쓰기 모드로 열기
fp = fopen("현규바보.txt", "r");
///< 파일 포인터 확인 ( 제대로 열었는지 )
if( fp == NULL )
{
printf("파일 열기 실패\n");
return 0;
}
///< 데이터 읽기
fscanf(fp, "%d%f%s%I64d", &i, &f, pTest, &longlongint);
///< 잘 읽었는지 확인
printf("%I64d", longlongint);
///< 파일 포인터 닫기
fclose(fp);
return 0;
}
몇가지 눈여겨 볼 점은,
일단 파일을 열 때 읽기 모드로 열었다는 것.
그리고 fscanf() 는 인자를 주소형식으로 받는다는 것..(필자는 C 코딩에 익숙하지 않아서 이런게 아직 신기하다..)
그리고 scanf()는 공백문자, 탭문자, 개행문자 등을 기준으로 자동으로 Tokening을 해준다는 것이다.
마지막으로 아래는 .cpp 파일을 자동으로 생성하는 코드이다.
FILE* fp = NULL;
fp = fopen("mainTestFile.cpp", "w");
///< 데이터 쓰기
fprintf(fp, "#include <stdio.h>\n");
fprintf(fp, "int main(void)\n");
fprintf(fp, "{\n");
fprintf(fp, " printf(\"\%%d,1,2\\n\");\n");
fprintf(fp, "}\n");
///< 파일 포인터 닫기
fclose(fp);
여기서 눈여겨볼 점은 따옴표(")나 역슬레쉬(\) 같은 특수문자를 쓰기 위해서 앞에 역슬레쉬를 붙여줬다는 점.
그리고 % 문자는 특이하게 \%를 앞에 붙여줬다는 점이다.
생성된 cpp 파일을 열어 내용을 확인해 보면 아래와 같다.
#include <stdio.h>
int main(void)
{
printf("%d,1,2\n");
}
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기