Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C 언어로 두 파일의 내용을 세 번째 파일로 병합하는 방법


이 글에서는 두 개의 텍스트 파일에 저장된 내용을 읽어 하나의 세 번째 파일로 합치는 C 프로그램을 소개합니다. 파일 입출력의 기본 원리를 이해하는 데 도움이 되는 대표적인 예제입니다.

먼저 실행 결과부터 살펴보겠습니다.

입력

java.txt에는 초기 내용 "Java is a programing language."가 저장되어 있음
kotlin.txt에는 초기 내용 "kotlin is a programing language."가 저장되어 있음
ttpoint.txt는 초기 내용이 비어 있음

출력

files are merged
ttpoint.txt에는 최종적으로 "Java is a programing language. kotlin is a programing language."가 저장됨

즉, java.txt와 kotlin.txt의 내용이 순서대로 이어 붙여져 ttpoint.txt에 저장됩니다.

알고리즘

시작
    문자형 배열 a[]를 선언하고 "Java is a programing language."로 초기화
    정수형 변수 i를 선언하고 0으로 초기화
    FILE 타입 포인터 f1을 선언
    f1 포인터로 "java.txt" 파일을 쓰기 모드(w)로 열기
    while (a[i] != '\0') 동안
        fputc(a[i], f1)을 호출해 배열 a[]의 데이터를 f1에 기록하고 i 증가
    fclose()로 f1 파일 포인터 닫기
    문자형 배열 b[]를 선언하고 "kotlin is a programing language."로 초기화
    정수형 변수 j를 선언하고 0으로 초기화
    FILE 타입 포인터 f2를 선언
    f2 포인터로 "kotlin.txt" 파일을 쓰기 모드(w)로 열기
    while (b[j] != '\0') 동안
        fputc(b[j], f2)를 호출해 배열 b[]의 데이터를 f2에 기록하고 j 증가
    fclose()로 f2 파일 포인터 닫기
    f1 포인터로 "java.txt" 파일을 읽기 모드(r)로 다시 열기
    f2 포인터로 "kotlin.txt" 파일을 읽기 모드(r)로 다시 열기
    FILE 타입 포인터 f3를 선언
    f3 포인터로 "ttpoint.txt" 파일을 쓰기 모드(w)로 열기
    문자형 변수 c를 선언
    if (f1 == NULL || f2 == NULL || f3 == NULL)이면
        "couldn't open the file." 출력 후 프로그램 종료
    while ((c = fgetc(f1)) != EOF) 동안
        fputc() 함수로 변수 c의 값을 f3 파일 포인터에 기록
    while ((c = fgetc(f2)) != EOF) 동안
        fputc() 함수로 변수 c의 값을 f3 파일 포인터에 기록
    fclose(f3) 함수를 호출해 파일 포인터 닫기
    f3 파일 포인터로 ttpoint.txt 파일을 읽기 모드로 다시 열기
    "Merged java.txt and kotlin.txt into ttpoint.txt" 출력
    while (!feof(f3)) 동안
        putchar(fgetc(f3)) 함수를 호출해 f3의 내용을 화면에 출력
    f1, f2, f3 파일 포인터를 각각 닫기
끝.

전체 예제 코드

#include <stdio.h>
#include <stdlib.h>
int main() {
    char a[] = "Java is a programing language.";
    int i=0;
    FILE *f1; // 병합할 두 파일 준비
    f1 = fopen("java.txt", "w");
    while (a[i] != '\0') {
        fputc(a[i], f1);
        i++;
    }
    fclose(f1);
    char b[] = "kotlin is a programing language.";
    int j =0;
    FILE *f2;
    f2 = fopen("kotlin.txt", "w");
    while (b[j] != '\0') {
        fputc(b[j], f2);
        j++;
    }
    fclose(f2);
    f1 = fopen("java.txt", "r");
    f2 = fopen("kotlin.txt", "r");
    FILE *f3 = fopen("ttpoint.txt", "w"); // 결과를 저장할 파일 열기
    char c;
    if (f1 == NULL || f2 == NULL || f3 == NULL) {
        puts("Could not open files");
        exit(0);
    }
    while ((c = fgetc(f1)) != EOF) // 첫 번째 파일의 내용을 ttpoint.txt로 복사
    fputc(c, f3);
    while ((c = fgetc(f2)) != EOF) // 두 번째 파일의 내용을 ttpoint.txt로 복사
    fputc(c, f3);
    fclose(f3);
    f3 = fopen("ttpoint.txt", "r");
    printf("Merged java.txt and kotlin.txt into ttpoint.txt\n");
    while (!feof(f3))
    putchar(fgetc(f3));
    fclose(f1); // 파일 포인터 닫기
    fclose(f2);
    fclose(f3);
    return 0;
}

실행 결과

Merged java.txt and kotlin.txt into ttpoint.txt
Java is a programing language.kotlin is a programing language.

코드 설명 및 주요 포인트

이 프로그램의 흐름은 크게 세 단계로 나눌 수 있습니다.

1단계: 샘플 파일 생성
배열 a[]b[]에 저장된 문자열을 fputc() 함수로 한 글자씩 java.txt와 kotlin.txt에 기록합니다. 실제 프로젝트에서는 이미 존재하는 파일을 사용하므로 이 단계는 생략할 수 있습니다.

2단계: 파일 병합
두 소스 파일을 읽기 모드("r")로 열고, 결과 파일 ttpoint.txt를 쓰기 모드("w")로 엽니다. 그런 다음 fgetc()로 한 문자씩 읽으면서 파일 끝(EOF)에 도달할 때까지 fputc()로 결과 파일에 기록합니다. 첫 번째 파일의 복사가 끝나면 이어서 두 번째 파일을 같은 방식으로 복사하여 두 내용이 자연스럽게 이어지도록 합니다.

3단계: 결과 확인 병합이 완료된 ttpoint.txt를 다시 읽기 모드로 열어 fgetc()putchar()를 조합해 화면에 출력함으로써 병합 결과를 확인합니다.

사용된 주요 함수는 다음과 같습니다.

  • fopen(): 파일을 지정한 모드(읽기 r, 쓰기 w)로 열고 FILE 포인터를 반환합니다.
  • fputc(): 한 문자를 파일에 기록합니다.
  • fgetc(): 파일에서 한 문자를 읽어오며, 파일 끝에서는 EOF를 반환합니다.
  • feof(): 파일 끝에 도달했는지 검사합니다.
  • fclose(): 열린 파일을 닫고 시스템 자원을 해제합니다.

파일 작업이 끝난 후에는 반드시 fclose()를 호출해야 메모리 누수와 데이터 손실을 방지할 수 있다는 점도 기억해 두세요. 또한 파일 열기에 실패한 경우(NULL 반환)를 확인하는 예외 처리 습관은 안정적인 프로그램 작성의 기본입니다.