IFileOperationÀ» ÀÌ¿ëÇØ ÆÄÀÏ º¹»ç, Æú´õ º¹»ç, Æú´õ À̵¿À» Çغ¸ÀÚ. ½ÇÇà ¿¹Á¦ Äڵ常 ÀÖ°í ÀÚ¼¼ÇÑ ¼³¸íÀº »ý·«ÇÑ´Ù. ¾Æ·¡´Â Æú´õ º¹»ç ½ÇÇà½Ã ÁøÇà »óŸ¦ º¸¿©ÁÖ°í ÀÖ´Ù. »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù. void Test()
{ CopyFile(_tstring(TEXT("E:\\aitest\\code09\\conveyer.py")), _tstring(TEXT("¾È´¨.py")), _tstring(TEXT("E:\\aitest\\°¥¶õ´Ù"))); CopyDirectory(_tstring(TEXT("E:\\aitest\\code09")), _tstring(TEXT("E:\\aitest\\°¥¶õ´Ù"))); MoveDirectory(_tstring(TEXT("E:\\aitest\\code07")), _tstring(TEXT("E:\\aitest\\°¥¶õ´Ù"))); } ±¸Çö ÄÚµå #include <Shobjidl.h>
#include <atlbase.h> //A2W_EX #include <atlconv.h> //A2W_EX #ifndef _TSTRING_DEFINED #define _TSTRING_DEFINED typedef std::basic_string<WCHAR> _tstring; #endif bool RemoveFolder(_tstring folderName, bool useRecycleBin = true) { bool ret = false; const WCHAR* pFrom = NULL; #ifdef UNICODE pFrom = folderName.c_str(); #else USES_CONVERSION_EX; pFrom = A2W_EX(folderName.c_str(), folderName.length()); #endif IFileOperation* pfo; HRESULT hr; hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (SUCCEEDED(hr)) { HRESULT hr = CoCreateInstance(CLSID_FileOperation, NULL, CLSCTX_ALL, IID_PPV_ARGS(&pfo)); if (SUCCEEDED(hr)) { DWORD flags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI; if (useRecycleBin) { flags |= FOF_ALLOWUNDO; } // ÈÞÁöÅë¿¡ ³Ö±â hr = pfo->SetOperationFlags(flags); if (SUCCEEDED(hr)) { IShellItem *psiFrom = NULL; hr = SHCreateItemFromParsingName(pFrom, NULL, IID_PPV_ARGS(&psiFrom)); if (SUCCEEDED(hr)) { hr = pfo->DeleteItem(psiFrom, NULL); if (SUCCEEDED(hr)) printf("success\n"); else printf("fail\n"); psiFrom->Release(); } if (SUCCEEDED(hr)) { hr = pfo->PerformOperations(); if (SUCCEEDED(hr)) { ret = true; } } } pfo->Release(); } } CoUninitialize(); return ret; } void CopyFile(_tstring srcName, _tstring newName, _tstring destFolder) { IFileOperation *pfo; IShellItem *psiFrom = NULL; IShellItem *psiTo = NULL; const WCHAR* pFrom = NULL; const WCHAR* pNew = NULL; const WCHAR* pDestFolder = NULL; #ifdef UNICODE pFrom = srcName.c_str(); pNew = newName.c_str(); pDestFolder = destFolder.c_str(); #else USES_CONVERSION_EX; pFrom = A2W_EX(srcName.c_str(), srcName.length()); pNew = A2W_EX(newName.c_str(), newName.length()); pDestFolder = A2W_EX(destFolder.c_str(), destFolder.length()); #endif HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (SUCCEEDED(hr)) { OutputDebugString(TEXT("[OSK_DLL_PWN] CoInitializeEx")); hr = CoCreateInstance(CLSID_FileOperation, NULL, CLSCTX_ALL, IID_PPV_ARGS(&pfo)); if (SUCCEEDED(hr)) { hr = pfo->SetOperationFlags(FOF_NOCONFIRMATION | FOF_SILENT | FOFX_SHOWELEVATIONPROMPT | FOFX_NOCOPYHOOKS | FOFX_REQUIREELEVATION | FOF_NOERRORUI); if (SUCCEEDED(hr)) { hr = SHCreateItemFromParsingName(pFrom, NULL, IID_PPV_ARGS(&psiFrom)); if (SUCCEEDED(hr)) { if (NULL != pDestFolder) { hr = SHCreateItemFromParsingName(pDestFolder, NULL, IID_PPV_ARGS(&psiTo)); } if (SUCCEEDED(hr)) { hr = pfo->CopyItem(psiFrom, psiTo, pNew, NULL); } } if (SUCCEEDED(hr)) { hr = pfo->PerformOperations(); } } pfo->Release(); } CoUninitialize(); } } void MoveDirectory(_tstring srcPath, _tstring destPath) { IFileOperation *pfo; IShellItem *psiFrom = NULL; IShellItem *psiTo = NULL; const WCHAR* pFrom = NULL; const WCHAR* pTo = NULL; #ifdef UNICODE pFrom = srcPath.c_str(); pTo = destPath.c_str(); #else USES_CONVERSION_EX; pFrom = A2W_EX(srcPath.c_str(), srcPath.length()); pTo = A2W_EX(destPath.c_str(), destPath.length()); #endif HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (SUCCEEDED(hr)) { hr = CoCreateInstance(CLSID_FileOperation, NULL, CLSCTX_ALL, IID_PPV_ARGS(&pfo)); if (SUCCEEDED(hr)) { //ÁøÇà ´ëÈ »óÀÚ Ç¥½Ã hr = pfo->SetOperationFlags(FOF_NOCONFIRMATION | FOFX_SHOWELEVATIONPROMPT | FOFX_NOCOPYHOOKS | FOFX_REQUIREELEVATION | FOF_NOERRORUI); /* hr = pfo->SetOperationFlags(FOF_NOCONFIRMATION | FOF_SILENT | FOFX_SHOWELEVATIONPROMPT | FOFX_NOCOPYHOOKS | FOFX_REQUIREELEVATION | FOF_NOERRORUI); */ //hr = pfo->SetOperationFlags(FOF_NO_UI); if (SUCCEEDED(hr)) { hr = SHCreateItemFromParsingName(pFrom, NULL, IID_PPV_ARGS(&psiFrom)); if (SUCCEEDED(hr)) { if (NULL != pTo) { hr = SHCreateItemFromParsingName(pTo, NULL, IID_PPV_ARGS(&psiTo)); } if (SUCCEEDED(hr)) { hr = pfo->MoveItems(psiFrom, psiTo); } } if (SUCCEEDED(hr)) { hr = pfo->PerformOperations(); } } pfo->Release(); } CoUninitialize(); } } void CopyDirectory(_tstring srcPath, _tstring destPath) { IFileOperation *pfo; IShellItem *psiFrom = NULL; IShellItem *psiTo = NULL; const WCHAR* pFrom = NULL; const WCHAR* pTo = NULL; #ifdef UNICODE pFrom = srcPath.c_str(); pTo = destPath.c_str(); #else USES_CONVERSION_EX; pFrom = A2W_EX(srcPath.c_str(), srcPath.length()); pTo = A2W_EX(destPath.c_str(), destPath.length()); #endif HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (SUCCEEDED(hr)) { hr = CoCreateInstance(CLSID_FileOperation, NULL, CLSCTX_ALL, IID_PPV_ARGS(&pfo)); if (SUCCEEDED(hr)) { //ÁøÇà ´ëÈ »óÀÚ Ç¥½Ã hr = pfo->SetOperationFlags(FOF_NOCONFIRMATION | FOFX_SHOWELEVATIONPROMPT | FOFX_NOCOPYHOOKS | FOFX_REQUIREELEVATION | FOF_NOERRORUI); /* hr = pfo->SetOperationFlags(FOF_NOCONFIRMATION | FOF_SILENT | FOFX_SHOWELEVATIONPROMPT | FOFX_NOCOPYHOOKS | FOFX_REQUIREELEVATION | FOF_NOERRORUI); */ //hr = pfo->SetOperationFlags(FOF_NO_UI); if (SUCCEEDED(hr)) { hr = SHCreateItemFromParsingName(pFrom, NULL, IID_PPV_ARGS(&psiFrom)); if (SUCCEEDED(hr)) { if (NULL != pTo) { hr = SHCreateItemFromParsingName(pTo, NULL, IID_PPV_ARGS(&psiTo)); } if (SUCCEEDED(hr)) { hr = pfo->CopyItems(psiFrom, psiTo); } } if (SUCCEEDED(hr)) { hr = pfo->PerformOperations(); } } pfo->Release(); } CoUninitialize(); } } void Test() { CopyFile(_tstring(TEXT("E:\\aitest\\code09\\conveyer.py")), _tstring(TEXT("¾È´¨.py")), _tstring(TEXT("E:\\aitest\\°¥¶õ´Ù"))); CopyDirectory(_tstring(TEXT("E:\\aitest\\code09")), _tstring(TEXT("E:\\aitest\\°¥¶õ´Ù"))); MoveDirectory(_tstring(TEXT("E:\\aitest\\code07")), _tstring(TEXT("E:\\aitest\\°¥¶õ´Ù"))); } ´Ù¿î·Îµå: filecopy_move.cpp Âü°í) ÇÏÀ§Æú´õ Æ÷ÇÔ, Æú´õ Àüü¸¦ º¹»çÇÏÀÚ https://jangjy.tistory.com/378 ƯÀÌ»çÇ×À¸·Î ÆÄÀÏ¸í µÚ¿¡ \0 À» µÎ¹ø ºÙ¿©¾ß ¹®Á¦ ¾ø¾ú´ø°Å °°Àº±â¾ïÀÌ ÀÖ±äÇÕ´Ï´Ù. Remove Directory https://mindgear.tistory.com/239 https://ofekshilon.com/2009/12/25/deleting-folders/ SHFileOperation ´ë½Å IFileOperationÀ» »ç¿ë ±ÇÀå IFileOperation CopyItems http://programingstudy2013.blogspot.com/2016/02/ifileoperationcopyitems.html https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7Samples/winui/shell/appplatform/fileoperations/FileOperationSample.cpp |