bool SearchFiles(string strFolderPath, vector<string> &vecFilePaths, vector<string> &vecChildFolderPaths); 其功能是在由strFolderPath指定的文件夹路径中,查找文件和子文件夹;文件和子文件夹的绝对路径,将分别存储在vecFilePaths和vecChildFolderPaths;当文件及子文件都不存在时,返回false,其他情况返回true。该函数经过验证,执行结果符合预期,不会发生异常。 请编写一个函数,形式如下: int FindFiles(string strFolderPath, vector<string> &vecFilePaths); 需满足以下要求: 1. 在由strFolderPath指定的文件夹及其各级子文件夹中查找文件,并将所有文件的绝对路径记录在vecFilePaths中; 2. 返回找到的文件个数; 3. 使用递归实现。
时间: 2024-02-16 14:05:10 浏览: 133
好的,以下是符合要求的函数实现:
```c++
#include <iostream>
#include <vector>
#include <filesystem> // C++17标准库中的文件系统库
using namespace std::filesystem;
int FindFilesHelper(const std::string& path, std::vector<std::string>& vecFilePaths)
{
int count = 0;
for (const auto& entry : directory_iterator(path)) // 遍历目录
{
if (is_directory(entry.status())) // 如果是子目录,递归查找
{
count += FindFilesHelper(entry.path().string(), vecFilePaths);
}
else // 如果是文件,添加到结果数组中
{
vecFilePaths.push_back(entry.path().string());
count++;
}
}
return count;
}
int FindFiles(std::string strFolderPath, std::vector<std::string>& vecFilePaths)
{
if (!exists(strFolderPath)) // 如果目录不存在,直接返回0
{
return 0;
}
return FindFilesHelper(strFolderPath, vecFilePaths);
}
int main()
{
std::string path = "/path/to/folder";
std::vector<std::string> vecFilePaths;
int count = FindFiles(path, vecFilePaths);
for (const auto& filePath : vecFilePaths)
{
std::cout << filePath << std::endl;
}
std::cout << "Found " << count << " files." << std::endl;
return 0;
}
```
这里我们使用了 C++17 标准库中的文件系统库 `std::filesystem`。`FindFiles()` 函数接受一个文件夹路径和一个字符串向量作为参数,并返回找到的文件个数。该函数首先检查文件夹路径是否存在,如果不存在,则直接返回0。否则,它将调用名为 `FindFilesHelper()` 的辅助函数,该函数将在给定路径下递归查找所有文件,并将它们的绝对路径添加到结果数组中。最后,函数返回找到的文件数目。我们可以在主函数中调用 `FindFiles()` 函数,并打印结果数组中的所有文件路径。
阅读全文