遍历SD卡jpeg目录存图

#include <dirent.h>
#include <ctype.h>
// 函数:提取文件名中的序号
int extract_number(const char *filename) {
    int number = 0;
    while (*filename) {
        if (isdigit(*filename)) {
            number = number * 10 + (*filename - '0');
        }
        filename++;
    }
    return number;
}

// 函数:遍历文件夹并返回最大序号
int find_max_file_number(const char *dir_path) {
    DIR *dir;
    struct dirent *entry;
    int max_number = -1;

    dir = opendir(dir_path);
    if (dir == NULL) {
        perror("无法打开目录");
        return -1;
    }

    while ((entry = readdir(dir)) != NULL) {
        if (entry->d_type == DT_REG) {  // 只处理普通文件
            int current_number = extract_number(entry->d_name);
            if (current_number > max_number) {
                max_number = current_number;
            }
        }
    }

    closedir(dir);
    return max_number;
}
static char jjpeg[50*1024];
static void save_jpeg(char *buf, int size)
{
	TS_S32 s32Ret = 0;
	char dirPath[64] = {0};
	char yuvPath[64] = {0};
	FILE *fd = NULL;
	VIDEO_FRAME_INFO_S frame = {0};
	static int count = 0;

	printf("dump jpeg begin\n");

	if(access("/mnt/mmc01/0/jpeg",F_OK) != 0)
		mkdir("/mnt/mmc01/0/jpeg", 0777);

	int max_number = find_max_file_number("/mnt/mmc01/0/jpeg");
	printf("!!1!max_number=%d\n", max_number);

	snprintf(dirPath, sizeof(dirPath), "/mnt/mmc01/0/jpeg/%d.jpeg", max_number+1);
	fd = fopen(dirPath, "wb");
	fwrite(buf, size, 1, fd);
	fflush(fd);
	int fd_no = fileno(fd);
	fsync(fd_no);
	fclose(fd);

	printf("dump jpeg end\n");
	return;
}

save_jpeg(jjpeg, size);

1. 头文件与函数定义

  • <dirent.h>:用于目录操作(如打开目录、读取文件项)。

  • <ctype.h>:提供字符处理函数(如isdigit判断是否为数字)。


2. extract_number 函数

  • 作用:从文件名中提取连续数字并转换为整数。

  • 示例

    • 文件名 "photo5.jpg" → 提取 5

    • 文件名 "img12345.txt" → 提取 12345)。

  • 注意:若文件名无数字,返回 0


3. find_max_file_number 函数

  • 作用:遍历目录,找出文件名中数字最大的文件。

  • 流程

    1. 打开目录,检查是否为普通文件(DT_REG)。

    2. 对每个文件名调用 extract_number,更新最大序号。

    3. 返回最大序号;若目录为空或无数字文件,返回 -1

  • 注意:仅处理普通文件,忽略子目录和特殊文件。


4. save_jpeg 函数

  • 作用:将 JPEG 数据保存到按序号递增的文件中。

  • 流程

    1. 检查目录:若 /mnt/mmc01/0/jpeg 不存在,则创建(权限 0777)。

    2. 获取最大序号:调用 find_max_file_number,确定下一个序号(max_number + 1)。

    3. 生成文件名:如 /mnt/mmc01/0/jpeg/6.jpeg

    4. 写入文件:将数据写入文件,并调用 fsync 确保数据持久化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值