프로그래밍/MFC

CreateDirectory() 사용법 (하위 폴더, 하위의 하위 폴더 생성)

이자다 2024. 8. 9. 16:36
반응형

https://learn.microsoft.com/ko-kr/windows/win32/api/winbase/nf-winbase-createdirectory

 

CreateDirectory 함수(winbase.h) - Win32 apps

CreateDirectory 함수(winbase.h)는 새 디렉터리를 만듭니다.

learn.microsoft.com

 

 

 

 

 

 

CreateDirectory() 함수는 기본적으로 현재 존재하는 폴더 바로 밑에 폴더를 만드는 기능을 한다.

 

 

 

예를 들어 다음과 같이

 

"C:\Users\GDT_SW2024_01\Desktop\VS_Projects\교육자료만들어보기\temp"

 

라는 폴더 구조가 존재할 때 버튼에 아래와 같은 코드를 삽입하고 실행하면.

 

 

#define PATH_CSV	"C:\\Users\\GDT_SW2024_01\\Desktop\\VS_Projects\\교육자료만들어보기\\temp\\FileInOutResult"


CString strPath;
strPath.Format(_T("%s"), _T(PATH_CSV));
CreateDirectory(strPath, NULL);

 

 

 

 

위 그림과 같이 존재하는 폴더 temp 바로 밑에 FileInOutResult 폴더가 생성된다.

 

하지만 만일 PATH_CSV를 아래와 같이 FileInOutResult 를 존재하지 않는 CSV라는 폴더 밑에 생성하고 싶다면 어떻게 해야할까?

#define PATH_CSV	"C:\\Users\\GDT_SW2024_01\\Desktop\\VS_Projects\\교육자료만들어보기\\temp\\CSV\\FileInOutResult"

 

 

 

 

기존 temp 폴더를 비우고 CreateDirectory에 매개변수로 위 PATH_CSV를 넣고 실행해보자.

 

혹시 CSV 폴더가 생기고 그 밑에 정상적으로 FileInOutResult 폴더가 생겨날까?

 

 

실행 결과는 위와 같이 함수가 제대로 동작하지 않는다.

 

FileInOutResult 폴더를 만들고 싶은데 해당 폴더를 만들 장소인 CSV 폴더를 찾지 못하고 그대로 끝나버린다.

 

이러면 문제가 있다.

 

나중에 고객이 검사장비를 구동하고 결과를 원하는 디렉토리에 출력하고 싶은데 원하는 디렉토리를 설정하는 것에 제약이 생기면 불편하다.

 

이를 해결하기 위해선 PATH_CSV 문자열을 \\ 기준으로 나누고 각 디렉토리에 대해 CreateDirectory()를 실행해야 한다.

 

이미 존재하는 디렉토리에 대해서는 함수 실행이 실패하고, 없는 디렉토리는 생성하니까 반복문과 문자열 추출을 이용해 함수를 만들면 된다.

 

 

void CFileInOutDlg::CreateCSVDirectory(CString path)
{
	CString folder;
	int start = 0;	// Find 시작
	int end = 0;	// Find 끝

	while(TRUE)
	{
		end = path.Find('\\', start);		// 경로에서 해당 문자를 찾은 위치
		if (end == -1)						// 경로에 해당 문자가 없으면 그대로 만들면 됨
		{
			CreateDirectory(path, NULL);
            break;
		}
		folder = path.Left(end);			// 문자열 시작부터 해당 문자가 있는 위치 까지의 경로를 folder로
		CreateDirectory(folder, NULL);		// 이미 있는 폴더라면 실행 실패, 없는 폴더라면 생성

		start = end + 1;
	}
}

 

위 함수를 버튼에 달아주고 실행하면 아래와 같이 정상적으로 존재하지 않던 CSV 폴더까지 같이 만들어지는 것을 확인할 수 있다.

 

 

 

 

반응형

'프로그래밍 > MFC' 카테고리의 다른 글

MFC 소스코드 분석법 (chat GPT)  (0) 2024.03.25
wParam, lParam  (0) 2024.03.25
윈도우 프로시저  (0) 2024.03.15