C언어 기반 파일 탐색 프로그램 "HEAP CORRUPTION DETECTED" 오류
조회수 703회
컴퓨터에 있는 특정 폴더를 제외한 파일 전체를 탐색하는 프로그램을 작성중입니다. 실행하면 "HEAP CORRUPTION DETECTED" 라는 디버그 에러가 발생하는데 이 에러가 발생하는 경우는
- 메모리 할당이 되지 않은 포인터(NULL Pointer)에 값을 넣음
- 할당치를 초과하여 데이터가 입력됨
라고 나와있어 열심히 코드를 뒤적거리고 수정해봤지만 해결되지 않았습니다! VisualStudio로 디버깅을 시도했을 땐 do-while문 내에서 발생한다는데,
조언 부탁드려요.
#define MAX_LEN 1024
void FindAllFiles(char file_path[]) {
HANDLE hFileHandle; // File Descriptor Handle
WIN32_FIND_DATA findFileData; // File Data 구조
char file_path2[_MAX_PATH];
strcat(file_path, "\\");
strcpy(file_path2, file_path);
strcat(file_path, "*");
hFileHandle = FindFirstFile(file_path, &findFileData);
//찾고 싶은 파일명과 핸들을 얻어옴
if (hFileHandle != INVALID_HANDLE_VALUE) {
do {//TESTTEST 폴더를 제외하고 탐색
printf("findFileData.cFileName : %s\n", findFileData.cFileName);
if (!((strcmp(findFileData.cFileName, ".") == 0) || (strcmp(findFileData.cFileName, "..") == 0) || (strcmp(findFileData.cFileName, "TESTTEST") == 0))) {
//파일 속성을 참조하여 파일이면 암호화 폴더로 넘김
//디렉토리이면 재귀 호출 시도
if ((findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { //디렉토리면
string subFolder = file_path2;
subFolder.append("\\");
subFolder.append(findFileData.cFileName);
}
else { // 디렉토리가 아닌 파일이면
int File_Size = (findFileData.nFileSizeHigh * (MAXDWORD + 1)) + findFileData.nFileSizeLow;
//File_In_Out(file_pt, File_Size);
}
}
else {
if (!((strcmp(findFileData.cFileName, ".") == 0) || (strcmp(findFileData.cFileName, "..") == 0))) {
printf("예외 설정 파일 : %s\n", findFileData.cFileName);
}
}
//다음 File Handle로 접근
} while (FindNextFile(hFileHandle, &findFileData));
}
//파일을 찾은 후 핸들 종료
FindClose(hFileHandle);
}
int main(void) {
char file_path[_MAX_PATH] = "D:\TEST";
printf("파일 서치 시작\n");
FindAllFiles(file_path);
return 0;
}
<오류>
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
실행 시켜봤는데 잘 동작하네요.
단, 컴파일할 때 경고메시지가 하나 뜨긴 하는데, 메인 함수안의
"D:\TEST"
를"D:\\TEST"
로 바꾸어 주면 경고메시지를 해결할 수 있습니다.잘 동작하는 것으로 보아 코드 문제라기 보단 컴퓨터 설정 등의 문제인것 같습니다.
아래 코드 및 결과 참고하세요.
-코드
#define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <string> using namespace std; #define MAX_LEN 1024 void FindAllFiles(char file_path[]) { HANDLE hFileHandle; // File Descriptor Handle WIN32_FIND_DATA findFileData; // File Data 구조 char file_path2[_MAX_PATH]; strcat(file_path, "\\"); strcpy(file_path2, file_path); strcat(file_path, "*"); hFileHandle = FindFirstFile(file_path, &findFileData); //찾고 싶은 파일명과 핸들을 얻어옴 if (hFileHandle != INVALID_HANDLE_VALUE) { do {//TESTTEST 폴더를 제외하고 탐색 printf("findFileData.cFileName : %s\n", findFileData.cFileName); if (!((strcmp(findFileData.cFileName, ".") == 0) || (strcmp(findFileData.cFileName, "..") == 0) || (strcmp(findFileData.cFileName, "TESTTEST") == 0))) { //파일 속성을 참조하여 파일이면 암호화 폴더로 넘김 //디렉토리이면 재귀 호출 시도 if ((findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { //디렉토리면 string subFolder = file_path2; subFolder.append("\\"); subFolder.append(findFileData.cFileName); } else { // 디렉토리가 아닌 파일이면 int File_Size = (findFileData.nFileSizeHigh * (MAXDWORD + 1)) + findFileData.nFileSizeLow; //File_In_Out(file_pt, File_Size); } } else { if (!((strcmp(findFileData.cFileName, ".") == 0) || (strcmp(findFileData.cFileName, "..") == 0))) { printf("예외 설정 파일 : %s\n", findFileData.cFileName); } } //다음 File Handle로 접근 } while (FindNextFile(hFileHandle, &findFileData)); } //파일을 찾은 후 핸들 종료 FindClose(hFileHandle); } int main(void) { char file_path[_MAX_PATH] = "D:\\TEST"; printf("파일 서치 시작\n"); FindAllFiles(file_path); return 0; }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력