我想使用IFileOperation复制多个文件。 复制单个文件不是这个例子的问题: http://msdn.microsoft.com/en-us/library/windows/desktop/bb775761%28v=vs.85%29.aspx
我的问题是我找不到复制多个文件的方法,如* .txt。 我尝试过使用SHCreateShellItemArrayFromIDLists,就像这个片段一样:
IShellItem *psiTo = NULL;
HRESULT hr = SHCreateItemFromParsingName( csTarget, NULL, IID_PPV_ARGS(&psiTo) );
LPCITEMIDLIST pidlFiles = ILCreateFromPath(csSource);
UINT count = sizeof(pidlFiles);
IShellItemArray* psiaFiles = NULL;
hr = SHCreateShellItemArrayFromIDLists(count, &pidlFiles, &psiaFiles);
hr = pfo->CopyItems(psiaFiles, psiTo);
hr = pfo->PerformOperations();
另一种方法是使用SHCreateShellItemArray,如下所示:
LPCITEMIDLIST pidlParent = ILCreateFromPath(_T("C:\\"));
LPCITEMIDLIST pidlChild = ILCreateFromPath(_T("C:\\Temp\\*.txt"));
HRESULT hr = SHCreateShellItemArray(pidlParent, NULL, 1, &pidlChild, &psiaFiles);
hr = pfo->CopyItems(psiaFiles, psiTo);
hr = pfo->PerformOperations();
我尝试了不同的方法但几乎得到了E_INVALIDIDARG或ERROR_PATH_NOT_FOUND。 怎么了?
答案 0 :(得分:1)
ILCreateFromPath
不会使用通配符。不能,因为它返回一个PIDLIST_ABSOLUTE
。
最简单的解决方案是手动枚举所有文件FindFirstFile(*.txt)
,在每个结果上调用CopyItem
,然后在结尾处调用PerformOperations
一次。
像往常一样,较旧的Windows功能更好。 SHFileOperation
简单十倍且能够启动:它确实直接支持通配符。