QT结合FFmpeg学习笔记(3)——操作目录

概述:主要是在Linux中的使用。

  1. 重要的目录操作函数
avio_open_dir();	//打开文件
//两个参数,第一个为操作目录上下文指针的指针
//第二个为访问目录
//第三个NULL
//返回值>=0为成功
avio_read_dir();	//对文件读写
avio_close_dir();	//关闭文件
  1. 重要的操作结构体
AVIODirContext //操作目录的上下文,用于存储目录信息

AVIODirEntry	//目录项(就是目录下每一个项,相当于shi),用于存放文件名,文件大小信息等
  • AVIODirContext 解析:
    • 结构体可以把三个主要的函数串联起来。
    • 在avio_open_dir()使用之前,我们需要创建一个AVIODirContext 结构体,在函数里会帮我们分配用来存储目录信息。
    • 我们在read和close的时候就需要传进去这个参数。
  1. demo
#include <libavutil/log.h>	//用于输出信息
#include <libavformat/avformat.h>	//用于对文件在的操作
int main(){
	int ret = 0;
	 //先创建AVIODirContext结构体,来存储信息
 	AVIODirContext *ctx = NULL;
 	AVIODirEntry *entry = NULL;

	av_log_level(AV_LOG_INFO);	//设置日志级别
	//打开文件,目录地址在根目录,注意ctx要传进去的是指针的指针
	ret = avio_open_dir(&ctx,"./",NULL);
	if(ret<0){
		//这里的av_err2str(ret)能帮你把错误码转成字符串。
		av_log(NULL,AV_LOG_ERROR,"不能打开文件:%s\n",av_err2str(ret));	
		return -1;
	}

	while(1){
		ret = avio_read_dir(ctx,&entry);
		if(ret<0){
			av_log(NULL,AV_LOG_ERROR,"不能读到:%s\n",av_arr2str(ret));
			break;//读不到就退出
		}
		//读完跳出
		if(!entry){
			break;
		}
		 //这里PRId64是ffmpeg提供的一个宏,以16进制输出
 		av_log(NULL,AV_LOG_INFO,"%12"PRId64" %s \n",entry->size,entry->name);
 		
 		//这个函数用于释放entry
 		avio_free_directory_entry(&entry);

	}
	//这个函数一定要和avio_open_dir函数配套使用,不然会内存出错,简单来说就是打开和关闭要一起
	avio_close_dir(&ctx);

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值