gpt4 book ai didi

c++ - 使用 IFileOperation 复制文件 (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:35 29 4
gpt4 key购买 nike

我想使用 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。怎么了?

最佳答案

ILCreateFromPath 不接受通配符。不能,因为它返回单个 PIDLIST_ABSOLUTE

最简单的解决方案是手动枚举所有文件FindFirstFile(*.txt),对每个结果调用CopyItem,然后调用PerformOperations最后一次。

像往常一样,旧的 Windows 功能更好。 SHFileOperation 简单十倍,启动能力更强:它直接支持通配符。

关于c++ - 使用 IFileOperation 复制文件 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827336/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com