Computer/C, CPP, MFC

하위폴더까지 전체 복사하기

hwaya. 2015. 10. 2. 16:32
반응형
BOOL ---------------::XCopy(char *Src, char *Dest, int my94) 
{
	HANDLE hSrch;
	WIN32_FIND_DATA wfd;
	BOOL bResult = TRUE;

	char fname[MAX_PATH];
	char WildCard[MAX_PATH];	// 원본
	char HoneyCard[MAX_PATH];	// 사본
	char SrcFile[MAX_PATH];
	char DestFile[MAX_PATH];

	strcpy_s(WildCard, Src);
	strcat_s(WildCard, "\*.*");

	strcpy_s(HoneyCard, Dest);

	// 폴더위치
	if (my94 == 0)  // 재귀
	{
	}
	else if (my94 == 1)  // EZ-Raschel
	{
		strcat_s(HoneyCard, "\EZ-Raschel\\");
	}
	else if (my94 == 2) // Raschel
	{
		strcat_s(HoneyCard, "\Raschel\\");
	}
	CreateDirectory(HoneyCard, NULL);
	
	hSrch = FindFirstFile(WildCard, &wfd);

	if (hSrch == INVALID_HANDLE_VALUE)
	{
		return FALSE;
	}
	while (bResult)
	{
		wsprintf(fname, _T("%s\%s"), Src, wfd.cFileName);
		// 서브 디렉토리가 발견되면 서브 디렉토리를 복사한다. 
		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			if (wfd.cFileName[0] != '.')
			{
				wsprintf(SrcFile, _T("%s\%s\\"), Src, wfd.cFileName);
				wsprintf(DestFile, _T("%s\%s\\"), HoneyCard, wfd.cFileName);
				XCopy(SrcFile, DestFile, 0);
			}
		}
		else
		{
			wsprintf(DestFile, _T("%s\%s"), HoneyCard, wfd.cFileName);
			CopyFile(fname, DestFile, FALSE);
		}
		bResult = FindNextFile(hSrch, &wfd);
	}
	FindClose(hSrch);
	return TRUE;
}


반응형