본문 바로가기
코딩테스트

[C언어] 두 디렉토리 비교

by 얘리밍 2022. 3. 28.
320x100
728x90

두 디렉토리를 비교하는

프로그램 입니다.

 

오류가 많은 코드이니

참고만 하시길..

수정해야 할 코드는 주석처리를 했습니다.

 

나중에 시간날 때 다시 도전..

/**
* 두 디렉토리 비교
* Test와 Real 디렉토리 비교하여 파일 유무 및 내용 확인하기
*/
#include <stdio.h>
#include <string.h>
#include <io.h>
#include <stdlib.h>
#define _CRT_NONSTDC_NO_WARNINGS
typedef struct _finddata_t FILE_SEARCH;

char* getFileList(char* path);
void compare_file_name(char** arr1, char** arr2, int size1, int size2);
int compare_text(char** comp1, char** comp2);

int main()
{
	int i = 0;
	char test_path[100] = "C:\\A_company\\test\\*.*";
	char real_path[100] = "C:\\A_company\\Real\\*.*";

	char** testFile = getFileList(test_path);
	char** realFile = getFileList(real_path);

	int size1 = 0, size2 = 0;

	while (testFile[size1] != NULL && realFile[size2] != NULL) {
		size1++, size2++; //test, real 파일의 길이
	}

	compare_file_name(testFile, realFile, size1, size2);



	system("pause");
	return 0;

}
/* directory 파일 리스트 확인 */
char* getFileList(char* path)
{
	int res = 1;
	int cnt;
	long handle;
	char search_path[100];
	static char* fileList[100];
	int i = 0;


	FILE_SEARCH file_search;

	//절대경로 파일명 만들기
	sprintf_s(search_path, "%s%s", path);

	//폴더 내 모든 파일 찾음
	handle = _findfirst(search_path, &file_search);

	if (handle == -1) { // 파일이 없을 때
		printf("Empty!");
	}
	else { //파일 목록 확인

		while (_findnext(handle, &file_search) == 0) {
			if (!strcmp(file_search.name, ".") || !strcmp(file_search.name, "..")) continue;
			else { //파일 리스트 배열에 저장
				fileList[i] = malloc(strlen(file_search.name) + 1);
				strcpy(fileList[i], file_search.name);
				i++;
			}
		}
		return fileList;
	}
	memset(fileList, '\0', sizeof(char) * i);
	_findclose(handle);
}
/* 파일 내용 비교*/
int compare_text(char** comp1, char** comp2)
{
	FILE* fp1;
	FILE* fp2;
	int res = 0;

	//파일 열기 오류
	if (((fp1 = fopen(comp1, "r")) == NULL) || (fp2 = fopen(comp2, "r")) == NULL) {
		fprintf(stderr, "file open error!");
		exit(1);
	}

	while (1) {
		//fgets(comp1, sizeof(comp1), fp1);
		//fgets(comp2, sizeof(comp2), fp2);

		if (strcmp(comp1, comp2) != 0) {
			res = -1;
			return res;
			break;
		}
		else {
			return res;
			break;
		}
	}
}
/* 파일 이름 비교*/
void compare_file_name(char** arr1, char** arr2, int size1, int size2)
{
	static char* A1[100];
	static char* B1[100];

	int k = 0;

	printf("%s\n", arr1[1]);
	printf("%s\n", arr2[1]);

	//동일한 파일 
	for (int i = 0; i < size1; i++) {
		for (int j = 0; j < size2; j++) {
			if (strcmp(arr1[i], arr2[j]) == 0) { //파일 이름이 같으면
				int val = compare_text(arr1[i], arr2[j]); //내용 비교 시작
				if (val == -1) { //내용 다르면
					printf("X: ", arr1[i]);
				}

			}
			else if (strcmp(arr1[i], arr2[j]) < 0) { // T에만 있는 파일
				printf("T: ", arr1[i]);
			}
			else { // R에만 있는 파일
				printf("R: ", arr2[j]);
			}
		}
	}


}
728x90
반응형