C/C++ 프로그래밍 · 4 min read · Oct 09, 2025

C/C++ 단계별 학습 - 페이지 12

12. 단계별 CorC++ — C 프로그래밍 - 파일

파일 처리

소개

다음 프로그램의 출력을 찾아보겠습니다.

| | |

예, 학생 정보의 기록을 받아들이고 이를 표시합니다.
여기 동일한 프로그램이지만 몇 가지 수정된 문장이 포함되어 있습니다.

| | |

위의 두 프로그램은 동일하지만 두 번째 프로그램에는 강조된 문장 (FILE *fp = fopen(“stud.dat”, “a+”);)과 ‘f printf’, ‘ fp’와 같은 몇 가지 수정 사항이 포함되어 있습니다. 몇 가지 수정 사항만 포함되어 있습니다. 이러한 수정 사항은 콘솔에서 디스크로 데이터를 전송하는 데 영향을 미칩니다. 파일 stud.dat. 이 과정은 파일 제어/파일 관리/파일 조직으로 알려져 있습니다.

파일 제어 문을 사용하여 모니터에서 파일로 출력을 전송하는 가장 쉬운 방법입니다.

| | |

실제로 파일 처리는 많은 작업과 구현 방법이 포함됩니다. 다음은 파일을 처리하는 실제 프로세스입니다.

파일 처리

일반적으로 모든 프로그램은 결과 값을 화면에 표시해야 합니다(1번째 프로그램이 이를 설명합니다). 그러나 프로그램이 종료될 때마다 이러한 값은 메모리에서 제거됩니다. 기록을 영구적으로 보관하려면 파일에 저장하십시오. 모든 파일에는 몇 가지 작업이 있으며, 여기 몇 가지가 있습니다;

| | |

| | |

파일 작업

fopen모드 모드에서 스트림 파일 이름을 열고 성공하면 새로 열린 스트림에 대한 포인터를 반환합니다. 그렇지 않으면 Null을 반환합니다.
구문 **FILE fopen(const char filename, const char *mode);

| | FILE fp = fopen(“stud.dat”, “r”);   /  파일에서 읽기  /
FILE
fp = fopen(“emp.dat”, “w”); /  파일에 쓰기  /
FILE fp = fopen(“emp.dat”, “a+”);           /  파일에서 읽고 쓰기 / | | | 모드:
fopen 호출에 사용되는 모드 문자열은 다음 값 중 하나입니다:
모드     설명 r 읽기 전용으로 열기 w 쓰기를 위해 생성(해당 이름의 파일이 이미 존재하면 덮어씁니다). a 추가; 파일 끝에서 쓰기 위해 열거나 파일이 존재하지 않으면 쓰기 위해 생성합니다. r+ 업데이트를 위해 기존 파일 열기(읽기 및 쓰기) w+ 업데이트를 위해 새 파일 생성(읽기 및 쓰기).
해당 이름의 파일이 이미 존재하면 덮어씁니다.
a+ 추가를 위해 열기; 파일 끝에서 업데이트를 위해 열거나 파일이 존재하지 않으면 생성합니다. 주어진 파일이 텍스트 모드로 열리거나 생성되고 있음을 지정하려면, 문자열에 “ t “를 추가합니다( rt, w+t, 등).
이진 모드를 지정하려면 문자열에 “
b “를 추가합니다( wb, a+b, 등). | | fclose | fp가 가리키는 파일을 닫고 성공 시 0을 반환하며, 오류 발생 시 EOF를 반환합니다. | | 구문 | Int fclose(FILE
fp); | | | Fclose(fp);  fclose(stud);   fcloseall(); | | fprintf | 형식화된 출력을 스트림으로 보냅니다. printf와 동일한 형식 지정자를 사용하지만 지정된 스트림으로 출력을 보냅니다. 출력된 바이트 수를 반환하거나 오류 발생 시 EOF를 반환합니다. | | 구문 | Fprintf(fptr, “제어 문자열”, 목록); | | | Fprintf(fp, “%d %s %d %d %d”, sno, name, sub1, sub2, sub3);
fprintf(emp, “%d %s %d”, eno, name, sal); | |
fscanf | 이 함수는 지정된 파일에서 형식화된 데이터를 읽는 데 사용됩니다. | | 구문: | Fscanf(fptr, “제어 문자열”, 목록); | | | Fscanf(fp, “%d %s %d %d %d”, &sno, name, &sub1, &sub2, &sub3);
fscanff(emp, “%d %s %d”, &eno, name, &sal); | |
fwrite ** | Fwrite는 지정된 수의 동일한 크기의 데이터 항목을 출력 파일에 추가합니다. | | 구문: | Size_t fwrite(const void ptr, size_t size, size_t n, FILEstream);
인수  설명
Ptr 모든 객체에 대한 포인터; 작성된 데이터는 ptr에서 시작됩니다.
Size 각 데이터 항목의 길이
N 추가할 데이터 항목 수
stream 출력 파일을 지정합니다.
작성된 총 바이트 수는 ( n * size)입니다. | | fread | Fread는 입력 파일에서 지정된 수의 동일한 크기의 데이터 항목을 검색합니다. | | 구문 | Size_t fread(void ptr, size_t size, size_t n, FILEstream);
인수  설명
Ptr 모든 객체에 대한 포인터; 작성된 데이터는 ptr에서 시작됩니다.
size 각 데이터 항목의 길이
n 추가할 데이터 항목 수
stream 출력 파일을 지정합니다.
작성된 총 바이트 수는 ( n * size)입니다. | | rewind | 파일 포인터를 스트림의 시작으로 재배치합니다. | | 구문 | Void rewind(FILE *stream);
예:      fewind(fp);
Rewind(stream)은 fseek(stream, 0L, SEEK_SET)와 동일합니다.
단, rewind는 끝-파일 및 오류 지시기를 지우고, fseek는 끝-파일 지시기만 지웁니다. rewind 후 업데이트 파일에 대한 다음 작업은 입력 또는 출력이 될 수 있습니다. | | fseek | 스트림에 대한 파일 포인터는 whence로 지정된 위치에서 계산된 바이트 수의 오프셋에 위치합니다. 오프셋은 0, 음수 또는 양수일 수 있습니다. 정의된 기호 SEEK_CUR, SEEK_SET 및 SEEK_END는 현재 위치를 나타내기 위해 whence 지정자로 사용됩니다. BOF 및 EOF 각각. 성공하면 0을 반환하고 실패하면 비영을 반환합니다. | | 구문 | Int fssek(FILE *stream, long offset, int whence); | | ftell | 성공 시 현재 파일 포인터 위치를 반환하거나 오류 시 음수 값을 반환합니다. | | 구문 | Long ftell(FILE stream); | | feof | 스트림에서 끝-파일에 도달하면 비영을 반환하는 매크로입니다. | | 구문 | Int feof(FILE stream); | | eof | 주어진 핸들로 파일의 위치 표시기가 끝-파일에 있는지 확인합니다. 그렇다면 0을 반환하고, 위치 표시기가 끝-파일에 있지 않으면 1을 반환하며, 오류는 errno 설정 및 -1의 반환 값으로 표시됩니다. | | 구문 | Int eof(int handle); | | fgets / fputs | 함수 fgets/fputs는 스트림이 가리키는 파일에서 문자열(크기 n 바이트)을 가져오거나 넣고 오류 시 끝-파일을 반환합니다. | | 구문 | Char fgets(char s, int n, FILE stream); | | fgetc/fputc 구문 | 스트림에서 문자를 읽거나 씁니다. Int fgetc/fputc(FILE stream); | | fgetchar/ fputchar | 이는 위의 fgetc/fputc와 동일합니다. |

학생 데이터를 읽고 데이터 파일에 저장하는 프로그램을 작성하십시오.

| | / 학생 데이터 파일을 생성하는 프로그램 /
/ 85_write.c /
#include
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10],ch;
FILE *fp = fopen(“stud.dat”, “w”);
do{
clrscr();
printf(“학생 번호를 입력하세요      “); scanf(“%d”, &sno);
printf(“학생 이름을 입력하세요          “); scanf(“%s”, name);
printf(“3 과목 점수를 입력하세요      “);
scanf(“%d%d%d”, &sub1, &sub2, &sub3);
fprintf(fp, “%d %s %d %d %d\n”, sno, name, sub1, sub2, sub3);
printf(“\n\n계속 하시겠습니까… (y/n)”); ch = getche();
}while(toupper(ch) != ‘N’);
fclose(fp);
return 0;
} |

학생 데이터 파일에서 데이터를 검색하는 프로그램을 작성하십시오.

| | / 학생 데이터 파일에서 데이터를 검색하는 프로그램 /
/ 86_read.c /
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10];
FILE *fp = fopen(“stud.dat”, “a+”);
clrscr();
printf(“학생 기록은 다음과 같습니다….\n”);
do{
fscanf(fp, “%d%s%d%d%d\n”, &sno, name, &sub1, &sub2, &sub3);
printf(“%5d%15s%3d%3d%3d\n”, sno, name, sub1, sub2, sub3);
}while(!feof(fp));
fclose(fp);
return 0;
} |

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.