'c++'에 해당되는 글 2건


리스트 안의 특정 파일만 삭제하고, 또 어떤 폴더의 경우 개별적인 파일이 아니라 폴더 전체를 지워야 했다.

구글링을 통해 Copy & Paste로 해결. 언제까지 C&P만 하는 수준일지...

bool DeleteDirectory(LPCSTR lpszDir, bool noRecycleBin = true)
{
	int len = _tcslen(lpszDir);
	TCHAR *pszFrom = new TCHAR[len+2];
	_tcscpy(pszFrom, lpszDir);
	pszFrom[len] = 0;       // double-null termination
	pszFrom[len+1] = 0;   // double-null termination
	
	SHFILEOPSTRUCT	FileOp;
	
	FileOp.hwnd = NULL;
	FileOp.wFunc = FO_DELETE;
	FileOp.pFrom = pszFrom;
	FileOp.pTo = NULL;
	FileOp.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
	
	if( !noRecycleBin )
		FileOp.fFlags |= FOF_ALLOWUNDO;
		
	FileOp.fAnyOperationsAborted = FALSE;
	FileOp.lpszProgressTitle = NULL;
	FileOp.hNameMappings = NULL;
	
	int ret = SHFileOperation(&FileOp);
	delete [] pszFrom;
	return (ret == 0);

}



typedef struct _SHFILEOPSTRUCT {
    HWND hwnd;
    UINT wFunc;
    LPCTSTR pFrom;
    LPCTSTR pTo;
    FILEOP_FLAGS fFlags;
    BOOL fAnyOperationsAborted;
    LPVOID hNameMappings;
    LPCTSTR lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;


SHFILEOPSTRUCT 에 대하여 알아보자. 물론 MSDN에 있다. ㅡ.ㅡ

파일 처리 작업을 하는데 필요한 정보를 포함하고 있는 구조체로, Vista의 경우 IFileOperation 을 사용하는 것을 추천한다고 한다.

헉, Vista에 대한 처리는 안했는데,, 내일 가서 해야겠다.

hwnd 는 다이얼로그 박스에 대한 Handle,
wFunc 는 어떠한 작업을 수행할 것인지 가리키는 것으로, FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME,,
pFrom, pTo 는 source directory이나 file, destination directory나 file을 가리키는 포인터이다.
아울러 문자열은 항상 double-null로 종결되어야 한다. 마지막에 널 값이 두개가 되도록 해야된다는...
fFlags는 파일 작업을 할때, 제어하기 위한 플래그로 사용된다.
fAnyOperationAbroted 는 파일 함수가 끝나기 전에 취소될 경우 항상 TRUE를 반환한다. 그렇지 않을 경우는 FALSE를 return,
fNameMappings 는 fFlags 가 FOF_WANTMAPPINGHANDLE 로 설정된 경우,
이전 파일 이름과, 새파일 이름의 name mapping object의 Handle을 가지고 있다.
lpszProgressTitle 은 파일 작업 처리 진행과정에 보여지는 다이얼로그에 보여질 제목이다. 이건 문자열 끝에 널이 하나만 있어도 된다.

헤더는 shellapi.h를 include 시키면 된다.

자세한 건 MSDN에서,,,

내일가서 할일이 또 하나 생겼군....
저작자 표시
신고
블로그 이미지

Moonistar moonistar


제프리 리처의 Windows VIA C/C++ 을 사놓고, 첫 페이지 넘기고 방치하다가

공부 좀 하자.(왜? 할게 없으면 공부라도 해야 남지) 라는 생각에 틈틈히 보고 있는데,,, 질러 놓은 책이 하도 많아 이거 조금보고 저거 조금보고 ,,,,

프로세스 부분 보다가, 시스템 버전 알아내는 부분 보며,,,

무조건 눈에 안보이면 답답한 성격에, 코드를 써봐야 뭐가 알것같다는 무식한 생각에

MSDN에서 찾아서 타자 연습 ㅋ . 그대로 타자 연습해서 하면 안되던데,,, 좀 수정하면 문제 없음 .

근데 Output이 너무 허무하다.




봐야 할건 많고, 시간은 없고, 놀고는 싶고, 놀 사람은 없고 ㅡㅡ; 모르겠다. 모르면 알아야지... 그냥 닥치고 책들이나 다 보자!
저작자 표시
신고
블로그 이미지

Moonistar moonistar