Linux-arm环境下 使用C++ 写一个遍历目录下图片 图片每4张一组 每张图片文件名用下划线分割并且最后一位是图片的序号
时间: 2023-10-08 20:09:32 浏览: 71
图的遍历(c++代码)
5星 · 资源好评率100%
以下是一个简单的 C++ 程序,用于在 Linux ARM 环境下遍历指定目录下的图片文件,并按照要求每4张图片为一组,每张图片的文件名用下划线分割,最后一位是图片的序号:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
using namespace std;
bool is_image_file(const string& filename) {
// 判断文件名是否以 .jpg, .jpeg, .png, .bmp 等常见图片格式为后缀
return filename.size() >= 4 && (filename.substr(filename.size() - 4) == ".jpg" ||
filename.substr(filename.size() - 5) == ".jpeg" ||
filename.substr(filename.size() - 4) == ".png" ||
filename.substr(filename.size() - 4) == ".bmp");
}
int main() {
string dir_path = "/path/to/your/directory"; // 指定目录路径
int group_size = 4; // 每组包含的图片数量
DIR* dir = opendir(dir_path.c_str());
if (dir == nullptr) {
cerr << "Failed to open directory " << dir_path << endl;
return 1;
}
vector<string> image_files;
dirent* entry;
while ((entry = readdir(dir)) != nullptr) {
string filename = entry->d_name;
if (is_image_file(filename)) {
image_files.push_back(filename);
}
}
closedir(dir);
sort(image_files.begin(), image_files.end()); // 按文件名排序
int group_num = 0;
for (int i = 0; i < image_files.size(); i += group_size) {
string group_name = "group_" + to_string(group_num);
for (int j = 0; j < group_size && i + j < image_files.size(); j++) {
string old_filename = image_files[i + j];
string new_filename = group_name + "_" + to_string(j) + old_filename.substr(old_filename.find_last_of('.'));
string old_path = dir_path + "/" + old_filename;
string new_path = dir_path + "/" + new_filename;
int ret = rename(old_path.c_str(), new_path.c_str());
if (ret != 0) {
cerr << "Failed to rename file " << old_path << " to " << new_path << endl;
}
}
group_num++;
}
return 0;
}
```
该程序和前面的程序基本相同,只是加入了 `sys/stat.h` 和 `unistd.h` 头文件,并在 `rename` 函数调用后检查返回值以处理错误。注意,在 ARM 环境下使用 `rename` 函数时,需要保证文件系统具有足够的权限。
阅读全文