0

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

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

现在,在旧代码中,他们只是调用了 ShellExecute 并使用了 xcopy.exe。为了得到所有以 AAAAA 开头的文件,他们只是给 xcopy 提供了文件名 AAAAA.* 并且它知道复制所有以 AAAAA 开头的文件。现在,我试图让它复制而不必使用命令行,我遇到了麻烦。我希望 CopyFile 足够聪明,可以将 AAAAA.* 作为要复制的文件处理,但它根本不像 xcopy 那样做。那么,关于如何在没有外部调用 xcopy.exe 的情况下执行此操作的任何想法?

4

4 回答 4

3

以此为起点

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

甚至更好的是这个完整的例子

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

于 2010-06-11T21:11:41.093 回答
2

您也可以使用SHFileOperationor 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

于 2010-06-11T21:36:16.353 回答
1

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

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

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

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

于 2010-06-11T21:17:27.547 回答
1

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

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

于 2010-06-12T16:18:02.620 回答