c++ 获取目录下的文件及所有子文件夹的文件
时间: 2023-12-06 15:02:26 浏览: 27
您可以使用递归函数来实现获取目录下的文件及所有子文件夹的文件。具体实现方法可以参考以下代码:
```python
import os
def get_files(path):
files = []
for file_name in os.listdir(path):
file_path = os.path.join(path, file_name)
if os.path.isdir(file_path):
files.extend(get_files(file_path))
else:
files.append(file_path)
return files
path = 'your/path'
files = get_files(path)
print(files)
```
这段代码会递归获取 `path` 目录下的所有文件,包括子文件夹中的文件,最终返回一个文件列表 `files`。
相关问题
c++ 获取目录下的文件及文件夹
你可以使用以下代码获取目录下的文件及文件夹:
```c
#include <stdio.h>
#include <dirent.h>
int main() {
DIR* dir;
struct dirent* ent;
dir = opendir(".");
if (dir == NULL) {
perror("opendir error");
return 1;
}
while ((ent = readdir(dir)) != NULL) {
printf("%s\n", ent->d_name);
}
closedir(dir);
return 0;
}
```
这段代码打开当前目录,然后遍历目录中的所有文件和文件夹,打印出它们的名称。
c++ 如何获取文件夹目录下的所有文件名
在C++中,可以使用以下方法来获取文件夹目录下的所有文件名:
1. 使用 `<dirent.h>` 头文件中的函数来遍历文件夹目录。具体步骤如下:
```cpp
#include <iostream>
#include <dirent.h>
#include <vector>
#include <string>
std::vector<std::string> GetFilesInDirectory(const std::string& directory)
{
std::vector<std::string> files;
DIR* dir;
struct dirent* entry;
if ((dir = opendir(directory.c_str())) != nullptr)
{
while ((entry = readdir(dir)) != nullptr)
{
if (entry->d_type == DT_REG) // 只获取普通文件,不包括目录
{
files.push_back(entry->d_name);
}
}
closedir(dir);
}
else
{
std::cout << "无法打开目录:" << directory << std::endl;
}
return files;
}
int main()
{
std::string directory = "your_directory_path";
std::vector<std::string> files = GetFilesInDirectory(directory);
for (const auto& file : files)
{
std::cout << file << std::endl;
}
return 0;
}
```
2. 使用C++17的 `<filesystem>` 头文件 (C++17标准新增)。具体步骤如下:
```cpp
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
std::string directory = "your_directory_path";
for (const auto& entry : fs::directory_iterator(directory))
{
if (entry.is_regular_file()) // 只获取普通文件,不包括目录
{
std::cout << entry.path().filename().string() << std::endl;
}
}
return 0;
}
```
以上两种方法都可以获取文件夹目录下的所有文件名。如果使用C++17及以上版本,推荐使用第二种方法,因为它提供了更简洁的API。如果使用较旧的C++版本,则可以选择第一种方法。