系统自带的文件拷贝、移动、删除和重命名操作
前言 经常随手花上个半到一个小时,自己手写一个拷贝系统文件的代码,里面用上个几重递归,然后判断下文件属性,看是文件夹还是文件。然后自己根据文件的大小来控制进度条的显示进度。是否真的需要付出这么多了?
最近,研究了一下windows shell编程,发现其实很多系统有的功能,系统早就做好,并且完完全全的提供给我们了,只是我们比较喜欢一步步的自己来维护每一个流程。最终导致的结果是,耽误了开发进度,同时造成了某些不可知的软件bug。

int CLaterFileOperator::FORenameFile(const wstring &strFrom, const wstring &strRename){HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (SUCCEEDED(hr)){IFileOperation *pfo;///< Create the IFileOperation interfacehr = CoCreateInstance(CLSID_FileOperation, NULL, CLSCTX_ALL, IID_PPV_ARGS(&pfo));if (SUCCEEDED(hr)){///< Set the operation flagshr = pfo->SetOperationFlags(FOF_ALLOWUNDO | FOF_NOCONFIRMATION);if (SUCCEEDED(hr)){///< Create an IShellItem from the supplied source pathIShellItem *psiFrom = NULL;hr = SHCreateItemFromParsingName(strFrom.c_str(), NULL, IID_PPV_ARGS(&psiFrom));if (SUCCEEDED(hr)){hr = pfo->RenameItem(psiFrom, strRename.c_str(), NULL);psiFrom->Release();}if (SUCCEEDED(hr)){hr = pfo->PerformOperations();} }pfo->Release();}CoUninitialize();}return hr;}