C++-将文件复制到所有子目录
C++ - Copying a file to all sub directories
我正试图创建一个用于教育目的的程序,该程序应该能够将.exe
的同一目录中的一个文件(任何扩展名,文件名永远不会更改)复制到主目录中的所有目录中。例如,我有:
- 主目录
- Program.exe
- 文件测量
- 目录1
- 目录2
- 目录3
在这种情况下,程序应该将file.something复制到目录1、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
有了这两个函数(它应该返回一个字符数组,而不是字符串,因为我被迫使用这些数组来使代码工作),我就可以进行一个简单的循环,每次都更改目标文件夹并将文件复制到其中
当然,这只是如何解决问题,如果有更好的解决方案,那就顺其自然吧
最后一件事:如果你能添加每个块或命令的作用,我会非常高兴,因为我还在学习c++,而且我现在是一个初学者。
假设:
- 您使用不可移植函数
[_fullpath()
]1编写不可移植代码 - 仅针对窗口
- 在使用
_fillpath()
而非_wfullpath()
时禁用了unicode - 您不想使用第三方库
如何使用windows
您可以使用FindFirstFile()和FindNextFile()来遍历目录。MSDN提供了一个很好的例子来说明如何使用它们。
不幸的是,FindFirstFile()
是非常基本的,它将自己限制为基于包含通配符的文件名来搜索条目。在查找目录时,更为棘手的是:必须使用FindFirstFileEx()
。函数文档中称为fSearchOp的参数应为FindExSearchLimitToDirectories
数据以WIN32_IND_data结构返回,您可以在其中读取cFileName
。顺便说一句,尽量避免像255这样的硬编码长度,而更喜欢众所周知的常数(这里是特定于窗口的MAX_PATH)。
最后,当您循环时,您可以使用自己的基于C++标准的复制功能或使用特定于windows的CopyFile()
执行复制
最后备注
这种体操根本不便于携带。如果你想在windows之外的其他平台上使用你的代码,你必须使用完全不同的API,例如unix/linux和co的dirent.h。这就是为什么对于这种特殊的工作,像boost这样的第三方库非常有用。如果您有时间,可以在这里查找带有boost的目录迭代教程,并与基于windows的代码进行比较。
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 使用strcpy将char数组的元素复制到另一个数组
- 是否可以初始化不可复制类型的成员变量(或基类)
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 复制列表初始化的隐式转换的等级是多少
- 当从函数参数中的临时值调用复制构造函数时
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 复制几乎为空的数组的最快方法
- 以下示例中如何避免代码复制?C++/库达
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 复制目录和子目录
- C++-将文件复制到所有子目录