系统自带的文件拷贝、移动、删除和重命名操作(二)
p = {0};
FileOp.hwnd = NULL; // 调用过程会改变父窗口属性
FileOp.wFunc = FO_RENAME; // 执行文件拷贝
FileOp.pFrom = srcPath;
FileOp.pTo = reName;
FileOp.hNameMappings = NULL;
FileOp.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;
int nRet = SHFileOperation(&FileOp);
return nRet;
}
新版文件操作
拷贝操作
[cpp]
int CLaterFileOperator::FOCopyFile(const wstring &strFrom, const wstring &strTo)
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOperation *pfo;
///< Create the IFileOperation interface
hr = CoCreateInstance(CLSID_FileOperation,
NULL,
CLSCTX_ALL,
IID_PPV_ARGS(&pfo));
if (SUCCEEDED(hr))
{
///< Set the operation flags
hr = pfo->SetOperationFlags(FOF_ALLOWUNDO);
if (SUCCEEDED(hr))
{
///< Create an IShellItem from the supplied source path
IShellItem *psiFrom = NULL;
hr = SHCreateItemFromParsingName(strFrom.c_str(),
NULL,
IID_PPV_ARGS(&psiFrom));
if (SUCCEEDED(hr))
{
///< Create an IShellItem from the supplied destination path.
IShellItem *psiTo = NULL;
hr = SHCreateItemFromParsingName(strTo.c_str(),
NULL,
IID_PPV_ARGS(&psiTo));
if (SUCCEEDED(hr))
{
hr = pfo->CopyItem(psiFrom, psiTo, NULL, NULL);
if (NULL != psiTo)
{
psiTo->Release();
}
}
psiFrom->Release();
}
if (SUCCEEDED(hr))
{
hr = pfo->PerformOperations();
}
}
pfo->Release();
}
CoUninitialize();
}
return hr;
}
移动操作
[cpp]
int CLaterFileOperator::FORemoveFile(const wstring &strFrom, const wstring &strTo)
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOperation *pfo;
///< Create the IFileOperation interface
hr = CoCreateInstance(CLSID_FileOperation,
NULL,
CLSCTX_ALL,
IID_PPV_ARGS(&pfo));
if (SUCCEEDED(hr))
{
///< Set the operation flags
hr = pfo->SetOperationFlags(FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR);
if (SUCCEEDED(hr))
{
///< Create an IShellItem from the supplied source path
IShellItem *psiFrom = NULL;
hr = SHCreateItemFromParsingName(strFrom.c_str(),
NULL,
IID_PPV_ARGS(&psiFrom));
if (SUCCEEDED(hr))
{
///< Create an IShellItem from the supplied destination path.
IShellItem *psiTo = NULL;
hr = SHCreateItemFromParsingName(strTo.c_str(),
NULL,
IID_PPV_ARGS(&psiTo));
if (SUCCEEDED(hr))
{
hr = pfo->MoveItem(psiFrom, psiTo, NULL, NULL);
if (NULL != psiTo)
{
psiTo->Release();
}
}
psiFrom->Release();
}
if (SUCCEEDED(hr))
{
hr = pfo->PerformOperations();
}
}
pfo->Rele