C ++ - 将文件复制到所有子目录

时间:2014-10-01 17:27:29

标签: c++

我试图创建一个用于教育目的的程序,该程序应该能够将.exe的同一目录中的一个文件(任何扩展名,文件名永不改变)复制到所有主目录中的目录。 例如,我有:

  • Main_Directory
  • 的Program.exe
  • file.something
  • directory1中
  • Directory2
  • directory3目录

在这种情况下,程序应该将file.something复制到directory1,2和3中。 通过使用此代码,我可以访问.exe文件夹的绝对路径:

char basePath[255]="";
_fullpath(basePath,argv[0],sizeof(basePath));

理想情况下,要解决问题,可以进行两项功能:

第一个功能:

Input:
(char[]) The .exe's folder if necessary
Output:
(int) Number of folders inside the .exe's folder.

第二功能:

input:
(int) which folder to pick
(int) total number of folders
(char[]) the .exe's folder if necessary
Output:
(char[]) the name of the folder

使用这两个函数(应该返回一个字符数组而不是字符串,因为我被迫使用这些数组来使代码工作)我能够做一个简单的循环,改变目的地&#每次39; s文件夹并将文件复制到它。

当然,如果存在更好的解决方案,问题是如何解决的,那就这样吧。

最后一件事:如果您可以添加每个块或命令所做的事情,我会非常高兴,因为我仍在学习c ++,而且我目前是初学者。

1 个答案:

答案 0 :(得分:0)

假设:

  • 您编写非可移植代码,使用非可移植函数[_fullpath()] 1
  • 您只定位Windows
  • 您在使用_fillpath()而不是_wfullpath()
  • 时禁用了unicode
  • 您不想使用第三方库

如何使用Windows?

您可以使用FindFirstFile()和FindNextFile()来遍历目录。 MSDN有nice example如何使用它们。

不幸的是,FindFirstFile()非常基本,并且仅限于根据包含通配符的文件名搜索条目。当你在寻找目录时,它更棘手:你必须使用FindFirstFileEx()。函数文档中名为fSearchOp的参数应为FindExSearchLimitToDirectories

数据以WIN32_FIND_DATA结构返回,您可以在其中阅读cFileName。顺便说一句,尽量避免不惜任何代价的硬编码长度,如255,而是更喜欢众所周知的常量(这里是windows特定的MAX_PATH)。

最后,在循环时,您可以使用自己的基于C ++标准的复制功能或使用特定于Windows的CopyFile()

执行复制。

最后评论

这种体操一点都不便携。如果您想在Windows之外的其他平台上使用您的代码,则必须使用完全不同的API,例如dirent.h用于unix / linux和co。这就是为什么,对于这种特殊类型的工作,像boost这样的第三方库非常有用。如果你有时间,请在这里查看带有boost的directory iteration教程,并与基于Windows的代码进行比较。