使用C++ 写一个遍历目录下图片 图片每4张一组 每张图片文件名用下划线分割并且最后一位是图片的序号
时间: 2023-09-19 15:05:52 浏览: 83
好的,我可以为您提供一个遍历目录下图片的C++程序,实现每4张图片一组,每张图片文件名用下划线分割并且最后一位是图片的序号。具体的实现思路如下:
1. 使用C++的文件流对象,打开指定目录下的文件夹。
2. 循环读取目录下的文件,筛选出图片文件,并将它们存储到一个容器中,如vector。
3. 对存储图片的容器进行排序,确保图片按照文件名排序。
4. 循环遍历容器中的图片,根据图片名的下划线分割规则,将图片分类成每4张一组。
5. 将每一组图片的文件名输出到控制台。
下面是一个简单的实现代码,您可以参考一下:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#include <dirent.h>
using namespace std;
bool is_image(string filename) {
string ext = filename.substr(filename.rfind(".") + 1);
return ext == "jpg" || ext == "jpeg" || ext == "png" || ext == "bmp" || ext == "gif";
}
int main() {
string dir_path = "your_directory_path";
DIR* dp = opendir(dir_path.c_str());
if (!dp) {
cout << "Error: Failed to open directory." << endl;
return -1;
}
vector<string> image_files;
struct dirent* dirp;
while ((dirp = readdir(dp)) != NULL) {
string filename = string(dirp->d_name);
if (is_image(filename)) {
image_files.push_back(filename);
}
}
closedir(dp);
sort(image_files.begin(), image_files.end());
for (int i = 0; i < image_files.size(); i += 4) {
cout << image_files[i] << endl;
cout << image_files[i + 1] << endl;
cout << image_files[i + 2] << endl;
cout << image_files[i + 3] << endl;
}
return 0;
}
```
注意,代码中的`your_directory_path`需要替换成您要遍历的目录路径。另外,如果您的图片文件名不符合上述的命名规则,需要修改代码中的图片分类逻辑。
阅读全文