概述:主要是在Linux中的使用。
- 重要的目录操作函数
avio_open_dir(); //打开文件
//两个参数,第一个为操作目录上下文指针的指针
//第二个为访问目录
//第三个NULL
//返回值>=0为成功
avio_read_dir(); //对文件读写
avio_close_dir(); //关闭文件
- 重要的操作结构体
AVIODirContext //操作目录的上下文,用于存储目录信息
AVIODirEntry //目录项(就是目录下每一个项,相当于shi),用于存放文件名,文件大小信息等
- AVIODirContext 解析:
- 结构体可以把三个主要的函数串联起来。
- 在avio_open_dir()使用之前,我们需要创建一个AVIODirContext 结构体,在函数里会帮我们分配用来存储目录信息。
- 我们在read和close的时候就需要传进去这个参数。
- 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;
}