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
반응형
'코딩테스트' 카테고리의 다른 글
[kotlin] leetcode - Binary Search (0) | 2022.04.26 |
---|---|
[python/연결리스트] leetcode - Add Two Numbers 문제 (0) | 2022.04.20 |
[python/Array] leetcode - two sum 문제 (0) | 2022.04.18 |
[C언어] 삼각형 경로 최대 합 찾기 (0) | 2022.03.28 |
[C언어] 소수 찾기 문제 (0) | 2022.03.28 |