使用Windows CopyFile函数复制具有特定名称格式的所有文件

时间:2010-06-11 21:09:08

标签: c++ windows file-copying

您好!我正在更新一些具有特定名称的copys文件的C代码。基本上,我有一个目录,其中有一堆文件名如下:

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

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

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

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

有关详细信息,请查看以下MSDN链接:

http://msdn.microsoft.com/en-us/library/bb762164(v=VS.85).aspx

http://msdn.microsoft.com/en-us/library/bb775771(v=VS.85).aspx

答案 2 :(得分:1)

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

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

http://en.wikipedia.org/wiki/Dirent.h

除非您有特殊原因不这样做,否则继续使用xcopy可能会更容易。

答案 3 :(得分:1)

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

但是,有什么理由你还不能使用xcopy吗?您可以使用CreateProcess()启动它。它不漂亮,但它有效。