C_C++

(C언어) 두 개의 파일이 같은지 (다른지) 비교하기

고니자니 2023. 6. 23. 08:42
반응형

두 개의 파일이 같은지 비교하는 C언어 코드입니다.

명령 프롬프트(command line)에서 두 개의 파일명을 받고, 해당 파일을 읽어서 그 내용을 비교합니다.

 

 

// compare.c

#define _CRT_SECURE_NO_WARNINGS   // Visual Studio
#include <stdio.h>
#include <string.h>

#define MAX_LENGTH 1000

int main(int argc, char *argv[]) {
    if (argc != 3) {
        printf("Usage: compare <file1> <file2>\n");
        return 1;
    }

    char *filename1 = argv[1];
    char *filename2 = argv[2];

    FILE *file1 = fopen(filename1, "r");
    FILE *file2 = fopen(filename2, "r");

    if (file1 == NULL || file2 == NULL) {
        printf("Failed to open one or both files.\n");
        return 1;
    }

    char line1[MAX_LENGTH];
    char line2[MAX_LENGTH];
    int lineNum = 1;
    int differences = 0;

    while (fgets(line1, MAX_LENGTH, file1) && fgets(line2, MAX_LENGTH, file2)) {
        if (strcmp(line1, line2) != 0) {
            printf("Difference at line %d:\n", lineNum);
            printf("%s: %s", filename1, line1);
            printf("%s: %s", filename2, line2);
            differences++;
        }
        lineNum++;
    }

    while (fgets(line1, MAX_LENGTH, file1)) {
        printf("%s has more lines at line %d:\n", filename1, lineNum);
        printf("%s: %s", filename1, line1);
        differences++;
        lineNum++;
    }

    while (fgets(line2, MAX_LENGTH, file2)) {
        printf("%s has more lines at line %d:\n", filename2, lineNum);
        printf("%s: %s", filename2, line2);
        differences++;
        lineNum++;
    }

    if (differences == 0) {
        printf("Files are identical.\n");
    } else {
        printf("Found %d difference(s) between the files.\n", differences);
    }

    fclose(file1);
    fclose(file2);

    return 0;
}

 

실행 예시의 화면입니다.

 

1. 프로그램명만 입력하면 - 프로그램을 실행하는 형식을 출력합니다.

두 파일 내용 비교하기

 

2. 두 개의 파일명 중에서 한 개라도 없는 파일명을 입력하면 아래와 같은 메시지를 출력하고 종료합니다.

두 파일 내용 비교하기

 

3. 두 개의 파일 내용이 완전히 일치하면 아래와 같은 메시지를 출력합니다.

두 파일 내용 비교하기

 

4. 두 개의 파일이 다르면 라인 번호와 함께 틀린 내용을 출력합니다.

두 파일 내용 비교하기

728x90
반응형