您好!我正在更新一些具有特定名称的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的任何想法如何做到这一点?
答案 0 :(得分:3)
将此作为起点检查
http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx
甚至更好这个完整的例子
http://msdn.microsoft.com/en-us/library/aa365200(v=VS.85).aspx
答案 1 :(得分:2)
您还可以使用SHFileOperation
或IFileOperation
(后者只能从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()启动它。它不漂亮,但它有效。