c++遍历文件夹中所有图片,并且将图片名字前十个字母相同的图片放置同一个vector
时间: 2024-10-11 14:12:29 浏览: 58
在C++中,你可以使用`std::filesystem`库来遍历文件夹并按文件名的部分前缀分组。下面是一个简单的示例,展示如何实现这个功能:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <filesystem>
namespace fs = std::filesystem;
// 假设图片文件名都是全路径,且以.jpg结尾
std::vector<std::vector<std::string>> group_files_by_prefix(const fs::path& folder_path) {
std::vector<std::vector<std::string>> grouped_images;
std::vector<std::string> current_group;
for (const auto& entry : fs::directory_iterator(folder_path)) {
if (!entry.is_regular_file() || !entry.path().extension() == ".jpg") {
continue; // 只处理普通图片文件(.jpg)
}
std::string prefix = entry.path().filename().stem(); // 提取文件名的前缀
size_t common_length = std::min(prefix.size(), 10); // 我们只比较前10个字符
if (current_group.empty() || prefix.substr(0, common_length) == current_group.back().substr(0, common_length)) {
// 如果当前组为空或者新文件名和上一个文件名前10个字符相同,添加到当前组
current_group.push_back(entry.path());
} else {
// 否则,开始新的组
grouped_images.push_back(current_group);
current_group.clear();
current_group.push_back(entry.path());
}
}
// 添加最后一个组,如果有的话
if (!current_group.empty()) {
grouped_images.push_back(current_group);
}
return grouped_images;
}
int main() {
fs::path folder_path("your_folder_path"); // 替换为实际的文件夹路径
auto image_groups = group_files_by_prefix(folder_path);
for (const auto& group : image_groups) {
std::cout << "Group with prefix '";
for (const auto& file : group) {
std::cout << file.filename().substr(0, 10) << "... ";
}
std::cout << "'\n";
}
return 0;
}
```
阅读全文