C++ 使用windows CopyFile功能复制具有特定名称格式的所有文件

C++ 使用windows CopyFile功能复制具有特定名称格式的所有文件,c++,windows,file-copying,C++,Windows,File Copying,你好!!我正在更新一些用特定名称复制文件的C代码。基本上,我有一个目录,其中包含一堆文件,名称如下: AAAAA.1.XYZ AAAAA.2.ZYX AAAAA.3.YZX bbb.1.XYZ bbb.2.ZYX 现在,在旧代码中,他们只使用了对ShellExecute的调用,并使用了xcopy.exe。为了获得所有以AAAAA开头的文件,他们只给xcopy文件名AAAAA.*并且它知道复制所有以AAAAA开头的文件。现在,我试图让它在不使用命令行的情况下进行复制,我遇到了麻烦。我希望CopyF

你好!!我正在更新一些用特定名称复制文件的C代码。基本上,我有一个目录,其中包含一堆文件,名称如下:

AAAAA.1.XYZ
AAAAA.2.ZYX
AAAAA.3.YZX
bbb.1.XYZ
bbb.2.ZYX

现在,在旧代码中,他们只使用了对ShellExecute的调用,并使用了xcopy.exe。为了获得所有以AAAAA开头的文件,他们只给xcopy文件名AAAAA.*并且它知道复制所有以AAAAA开头的文件。现在,我试图让它在不使用命令行的情况下进行复制,我遇到了麻烦。我希望CopyFile能够足够智能地处理AAAAA.*作为要复制的文件,但它根本不像xcopy那样做。那么,有没有关于如何在没有外部调用xcopy.exe的情况下实现这一点的想法

将此作为起点进行检查

或者更好的是这个完整的例子


基本上,您必须编写代码以在xcopy中重现功能。为此,必须通过访问路径并在其中递归来构建文件列表。用你的模式测试每个找到的条目,只保留那些匹配的条目。然后用CopyFile在该列表上迭代

请参阅以下可帮助您构建文件列表的函数集:


除非您有特定的理由不使用xcopy,否则继续使用xcopy可能会更容易。

您也可以使用
SHFileOperation
IFileOperation
(后者仅从Vista向上提供,但现在是MSDN推荐的方式)。默认情况下,SHFileOperation支持通配符并显示进度,但还有一个用于静默操作的标志

有关更多信息,请查看以下MSDN链接:


有很多方法可以做到这一点。我可能会使用FindFirstFile()/FindNextFile()的循环


但是,有什么理由不能继续使用xcopy吗?您可以使用CreateProcess()启动它。这并不漂亮,但很管用。

这里有一些示例代码,可以在boost::filesystem中使用正则表达式掩码,这会给您带来一些平台独立性(如果您对这条路线感兴趣的话):刚刚和老板谈过。。。虽然无法告诉我为什么需要这样做,但他向我保证,最终会好得多;只有
IFileOperation
是Vista向上。是的,这就是我的意思。我想我的帖子在这方面是不清楚的。我编辑过,今天才做的。最终做了我想做的事。非常感谢!