• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

하위폴더 포함, 폴더 전체를 복사하자

Programming/C, C++, MFC 2020. 11. 10. 09:55




하위폴더 및 파일들을 포함한 폴더를 다른 경로로 전체 복사하고 싶은 경우가 있다.

 

이럴 경우 SHFileOperation 를 이용하여 복사를 수행하자.


int CopyFolder(CString szFrom, CString szTo)
{
	SHFILEOPSTRUCT shfo;
	int nRet;
	char* pszFrom = new char[szFrom.GetLength() + 1];
	char* pszTo = new char[szTo.GetLength() + 1];

	strcpy(pszFrom, szFrom);
	strcpy(pszTo, szTo);

	ZeroMemory(&shfo, sizeof(SHFILEOPSTRUCT));
	shfo.hwnd = AfxGetMainWnd()->m_hWnd;
	shfo.wFunc = FO_COPY;
	shfo.pFrom = pszFrom;
	shfo.pTo = pszTo;
	shfo.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT | FOF_NOCONFIRMMKDIR;
	shfo.lpszProgressTitle = NULL;

	nRet = SHFileOperation(&shfo);

	delete[] pszFrom;
	delete[] pszTo;

	return nRet;
}

 


이유는 아직 확인 못했지만 위 방법이 사용중 오류가 발생하는 경우가 있어서 아래 방법으로 대체하여 사용 중 (20.11.20. 기준)

int CopyFolder(CString szFrom, CString szTo)
{
	HANDLE hSrch;
	WIN32_FIND_DATA wfd;
	BOOL bResult = TRUE;
	TCHAR WildCard[MAX_PATH];
	TCHAR SrcFile[MAX_PATH];
	TCHAR DestFile[MAX_PATH];

	wsprintf(WildCard, "%s\\*.*", szFrom);
	CreateDirectory(szTo, NULL);
	hSrch = FindFirstFile(WildCard, &wfd);
	if (hSrch == INVALID_HANDLE_VALUE)
		return FALSE;
	while (bResult) {
		wsprintf(SrcFile, "%s\\%s", szFrom, wfd.cFileName);
		wsprintf(DestFile, "%s\\%s", szTo, wfd.cFileName);
		// 서브 디렉토리가 발견되면 서브 디렉토리를 복사한다.
		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
			if (lstrcmp(wfd.cFileName, ".") && lstrcmp(wfd.cFileName, "..")) {
				CopyFolder(SrcFile, DestFile);
			}
		}
		else {
			CopyFile(SrcFile, DestFile, FALSE);
		}
		bResult = FindNextFile(hSrch, &wfd);
	}
	FindClose(hSrch);
	return TRUE;
}
저작자표시 (새창열림)

'Programming > C, C++, MFC' 카테고리의 다른 글

특정주소가 폴더(디렉토리)인지 파일인지 확인하자  (0) 2021.02.04
MFC Dialog 에서 enter, esc 동작을 제어하자  (0) 2020.11.10
std::string에서 format을 사용하자  (2) 2020.03.19
CStdioFile 을 이용한 파일 입출력에서 내용이 깨질경우  (0) 2019.07.09
Unicode 환경에서 한글이 깨질경우 해결방법  (0) 2019.03.11
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

카테고리

  • 살다보니.. (449)
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (147)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (58)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (8)
    • 전공관련 (80)
      • Algorithm (6)
      • Deep Learning (54)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (8)
    • Computer (118)
      • Utility (21)
      • Windows (31)
      • Mac (4)
      • Ubuntu, Linux (58)
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • Computer Tip
  • random variable
  • ReadString
  • 매트랩 함수
  • SVM
  • portugal
  • 스마트체험단
  • matlab function
  • matlab
  • Convolutional Neural Networks
  • 매트랩
  • CStdioFile
  • function
  • 오봉자싸롱
  • DeepLearning
  • 에누리닷컴
  • 일본
  • 갤럭시노트3
  • 큐슈
  • ColorMeRad
  • 크롬
  • 후쿠오카
  • Deep Learning
  • utility
  • 칼로리 대폭발
  • 딥러닝
  • review
  • DSLR
  • 포르투갈
  • LIBSVM

달력

«   2025/06   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
06-06 16:57

LATEST FROM OUR BLOG

RSS 구독하기

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바