임시파일

Cmaster
이동: 둘러보기, 찾기

목차

임시 파일 사용하기

임시 파일이란?

  • 디스크에 임시로 파일을 만들고 프로그램이 끝나면 없어진다.
  • 임시 파일은 "wb+"로 생성된다.
  • 윈도우에서 임시 파일의 생성 위치는 stdio.h에 매크로 P_tmpdir에 정의되어 있다.

Examples

예제 09-06-1

파일을 읽어 뒤 부분에 그대로 추가하기, 임시파일 사용하기.
  1. // 예제 09-06-1
  2. #include <stdio.h> 
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5.  
  6. FILE *gfopen(char *filename, char *mode);
  7.  
  8. int main() {
  9. 	FILE *fp, *tmp_fp;
  10. 	int c;
  11. 	char fn[30];
  12. 	printf("파일이름 입력 : ");
  13. 	scanf("%s", fn);
  14.  
  15. 	fp = gfopen(fn, "r+");
  16. 	tmp_fp = tmpfile();
  17. 	while( (c=getc(fp)) != EOF)
  18. 		putc(toupper(c), tmp_fp);
  19. 	rewind(tmp_fp);
  20. 	fprintf(fp, "---\n");
  21. 	while( (c=getc(tmp_fp)) != EOF)
  22. 		putc(c, fp);
  23. 	return 0;
  24. }
  25.  
  26. FILE *gfopen(char *filename, char *mode) {
  27. 	FILE *fp;
  28. 	if ( (fp = fopen(filename, mode)) == NULL) {
  29. 		fprintf(stderr, "Cannot open %s - bye!\n", filename);
  30. 		exit(0);
  31. 	}
  32. 	return fp;
  33. }
  • 해설
6: 함수 원형 선언

9: 파일 포인터 선언. fp는 읽을 파일, tmp_fp는 임시파일 포인터.

13: 읽을 파일의 이름을 입력한다.

15: 파일 읽기 검사하는 함수 gfopen호출, r+모드는 읽기 및 추가 모드이다. 추가는 파일의 끝에서 이루어진다.

16: 임시 파일 포인터 생성. 임시 파일을 디스크에 생성되면, 그 위치는 stdio.h에 정의되어 있다.

17~18: 읽기 파일에 데이터를 모두 읽어 임시 파일에 저장한다.

19: 임시 파일의 위치를 다시 처음으로 돌린다. 파일을 읽고 쓸 때 파일 포인터의 위치가 변경된다.

20: 원래 파일의 끝에 추가한다.

21~22: 원래 파일의 끝에 임시파일에 저장된 내용을 그대로 저장한다. 즉, 임시파일은 원 파일의 내용이므로 원 파일의 끝에는 원래 내용이 그대로 중복되어 저장된다.

26~33: 파일의 열기를 함수로 따로 만들어 처리한다.

29: stderr은 모니터를 지정한 것이며, 에러가 발생했을 때 메시지를 모니터로 출력하라는 의미이다.

  • 실행결과

Ex090601-1.png

Ex090601-2.png

Ex090601-3.png


예제 09-06-2

임시 파일을 이용하여 우편번호 검색하기.
  1. // 예제 09-06-2
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int main() {
  7. 	FILE *zt, *tfp;
  8. 	char zipcode[10], size, temp[150], d[5], find[20], c, i;
  9. 	char si_do[10], si_gun_gu[20], up_myon_dong[80], rhee[80], full_addr[80];
  10.  
  11. 	zt = fopen("zipcode2.txt", "r");
  12. 	tfp = tmpfile();
  13. 	while( (c = getc(zt)) != EOF)	// 디스크 파일을 임시파일로 옮김 
  14. 		putc(c, tfp);
  15. 	fclose(zt);
  16.  
  17. 	while(1) {
  18. 		rewind(tfp);
  19. 		printf("\n\n동(리) 입력(q:끝) : ");
  20. 		scanf("%s", find);
  21. 		if(*find == 'q')
  22. 			break;
  23. 		size = strlen(find);
  24. 		do {
  25. 	 		i = 0;
  26. 			while( (*(temp+i) = getc(tfp)) != '\n') { // 한 줄씩 읽어 들임. 
  27. 				i++;
  28. 				if( feof(tfp) )
  29. 					break;
  30. 			}
  31. 			*(temp + i) = '\0';
  32. 			sscanf(temp, "%[^;]%[;]%[^;]%[;]%[^;]%[;]"
  33. 				 "%[^;]%[;]%[^;]%[;]%[^\n]",
  34. 				zipcode, d, si_do, d, si_gun_gu, d, 
  35. 				up_myon_dong, d, rhee, d, full_addr);
  36. 			if (strlen(rhee) > 2) {
  37. 				if (strncmp(rhee, find, size)==0)
  38. 					printf("%s, %s\n", zipcode, full_addr);
  39. 			} else if (strlen(up_myon_dong) > 2) {
  40. 				if (strncmp(up_myon_dong, find, size)==0)
  41. 					printf("%s, %s\n", zipcode, full_addr);
  42. 			} else if (strlen(si_gun_gu) > 2) {
  43. 				if (strncmp(si_gun_gu, find, size)==0)
  44. 					printf("%s, %s\n", zipcode, full_addr);
  45. 			}
  46. 		} while( !feof(tfp) );
  47. 	}
  48. 	fclose(tfp);
  49. }
  • 해설
7: 입력 파일 포인터 및 임시 파일 포인터 선언

8~9: 각종 데이터를 저장할 변수 선언

11: 입력 파일 열기

13~14: 읽기 파일에서 임시 파일로 모든 데이터 옮김.

15: 그런 다음 읽기 파일을 닫는다.

17~47: 임시 파일에서 데이터를 읽어서 검색한 다음 해당하는 동(리)가 있으면 출력하는 루프

18: 임시 파일의 포인터를 처음으로 가져간다.

20: 찾을 문자열 입력

21: 문자열의 첫 글자가 'q'이면 끝낸다.

23: 문자열의 길이를 구한다.

26: 한 줄을 읽어 temp 문자열에 저장한다. 여기서는 줄 바꿈 문자를 만날 때까지 한줄 읽음.

31: 문자열 끝에 널을 삽입

32~35: 한 줄 읽은 문자열에서 ';'을 기준으로 각 필드를 분리한다.

36~45: 가장먼저 리(rhee)의 길이가 2보다 크면(공백일 수 있음) 리에서 찾고, 공백이면 읍면동에서 찾고, 읍면동도 공백이면 시군구에서 찾는다. 우편번호에 보면 공백이 있는 부분이 있음을 알 수 있다.

37,40,43: 문자열에 해당하는 문자가 있는지 검사한다.

46: 파일 끝까지 해당하는 문자열이 있는지 검색한다. 끝이면 다시 처음으로 가서 루프를 반복한다.

Notice: 이 우편번호는 우체국 사이트에 가면 구할 수 있다. 원본은 엑셀로 되어 있는데, 텍스트 파일로 바꾸었다. 텍스트 파일로 바꿨지만 실제 내용은 아래의 zipcode.txt와 같이 된다. 이 파일을 또 한번 처리하여 zipcode2.txt로 다시 만들었다. 원본 텍스트 파일에서는 공백이 일정하지 않아 정확하게 처리하기 위하여 새로 만든 것이다. 여러분도 프로그램으로 한번 작성해 보기 바란다. 파일이 매우 커서 메모장에서는 읽기가 힘들어 워드패드로 읽는 것이 좋다.

  • 실행결과

Ex090602.png

QUIZ

Quiz 09-06-1

ASCII 텍스트 파일을 하나 임시파일로 읽어 들여 이 파일을 암호화 하여 원래 파일의 끝에 추가하는 프로그램을 작성하라.암호화 방식은 한 글자씩 읽은 다음 0xAA와 XOR하는 것으로 한다.
개인 도구
이름공간
변수
행위
목록
도구모음