- binary(b)와 텍스트(t) 파일로 나누어서 접근
- 파일 접근 write(w), read(r), add(a)
- 파일 모드는 파일 접근방식과 타입에 따라 다르다
- 텍스트 읽기 전용 = "rt"
- 텍스트 쓰기 전용 = "wt"
- 텍스트 추가 전용 = "at"
- 이진파일 읽기 전용 = "rb"
- 이진파일 쓰기 전용 = "wb"
- 이진파일 추가 전용 = "ab"
- binary 타입은 메모리에 저장되있는 것 그대로 파일에 저장
- 텍스트 타입은 변수에 있는 내용을 텍스트로 저장
- 파일 접근 패턴
//파일 구조체 생성
FILE *file;
//파일 연결
file = fopen("경로","파일 모드");
//파일 입출력 실시
fprintf(파일 구조체,"내용",파일에 넣을 변수);
fprintf(file,"%d %s",123,"ㅋㅋㅋ");
fwrite(변수 주소,크기,넣을 개수,파일구조체);
fwrite(&p,sizeof(p),2,f);
fread(변수,읽어올 크기,읽어올 횟수,파일구조체);
fread(&s,sizeof(person),1,r);
//파일 닫기
fclose(파일구조체);
예제1> 성적구조체 배열을 이진파일로 저장
#include <stdio.h>
struct Subject{
int score;
char title[20];
};
void main(){
//과목들을 저장할 배열
Subject s[4];
//과목 점수 입력
int i;
for(i=0;i<4;i++){
printf("%d번째 과목명과 점수를 입력 하세요 : ",i+1);
scanf("%s %d",s[i].title, &s[i].score);
}
//파일 저장 부분
FILE *file;
file = fopen("c:\\test\\subject.obj","wb");
fwrite(s,sizeof(Subject),4,file);
fclose(file);
}
예제2> 이진 파일에 있는 성적을 읽은 후 텍스트 파일에 성적표 출력
#include <stdio.h>
#include <stdlib.h>
struct Subject{
int score;
char title[20];
};
void main(){
double sum=0.0;
int i;
Subject s[4];
FILE *file;
file = fopen("c:\\test\\subject.obj","rb");
fread(s,sizeof(Subject),4,file);
fclose(file);
file = fopen("c:\\test\\subjectMat.txt","wt");
fprintf(file,"================================\n");
fprintf(file,"%10s %5s %5s\n","과목명","점수","등급");
fprintf(file,"================================\n");
for(i=0;i<4;i++){
sum += s[i].score;
char ch;
//등급 처리
switch(s[i].score/10){
case 10:
case 9:
ch = 'A';
break;
case 8:
ch = 'B';
break;
case 7:
ch = 'C';
break;
case 6:
ch = 'D';
break;
default:
ch = 'F';
}
fprintf(file,"%9s %6d %4c\n",s[i].title,s[i].score,ch);
}
fprintf(file,"================================\n");
fprintf(file,"평균 : %lf\n",sum/i);
fprintf(file,"================================\n");
fclose(file);
}
'Code Archive > C언어' 카테고리의 다른 글
| Step17. C언어 교육내용 전체 소스코드 (0) | 2014.09.12 |
|---|---|
| Step16. 성적표 텍스트파일로 출력하는 프로그램 (0) | 2014.09.12 |
| Step14. 선행처리자(#define/#include) (0) | 2014.09.12 |
| Step13. 열거형(enum) (0) | 2014.09.12 |
| Step12. 동적 메모리 할당(malloc/realloc) (0) | 2014.09.12 |