FFmpeg文件操作和目录操作
2019-07-23 本文已影响0人
一叶知秋0830
一、删除文件和文件重命名
avpriv_io_delete
里面的参数都是要删除或改名的文件路径,avpriv_io_move
第一个参数是要改的文件路径,第二个参数是改名后的文件路径
#include <libavformat/avformat.h>
int main(int argc, char* argv[])
{
int flag;
// 删除文件
flag = avpriv_io_delete("./111.txt");
if(flag < 0){
// 打印日志
av_log(NULL,AV_LOG_ERROR,"文件删除失败\n");
}else{
av_log(NULL,AV_LOG_INFO,"文件删除成功\n");
}
// 文件重命名
flag = avpriv_io_move("./aa.txt","./bb.txt");
if(flag < 0){
// 打印日志
av_log(NULL,AV_LOG_ERROR,"文件改名失败\n");
}else{
av_log(NULL,AV_LOG_INFO,"文件改名成功\n");
}
return 0;
}
编译命令:
注意pkg-config --libs --cflags libavformat
表示通过pkg-config去查找libavformat库的路径,包裹它的不是单引号,是esc下面那个键。
clang -g -o file file.c `pkg-config --libs --cflags libavformat`
二、目录操作
目录操作主要是3个函数:
打开目录avio_open_dir()
读取文件avio_read_dir()
关闭目录avio_close_dir()
#include <libavutil/log.h>
#include <libavformat/avformat.h>
int main()
{
int flag,cnt;
AVIODirContext *ctx = NULL; // 定义上下文
AVIODirEntry *entry = NULL; // 定义实体(目录下一个文件的信息是一个实体)
// 设置日志级别
av_log_set_level(AV_LOG_INFO);
// 打开目录,第一个参数传入上下文指针的指针,第二个参数为目录路径
// 这里传入&ctx给上下文分配一个空间
flag = avio_open_dir(&ctx,"/Users/TING/Downloads/test",NULL);
if(flag < 0){
// av_err2str是将错误码转换成其对应的错误信息
av_log(NULL,AV_LOG_ERROR,"打开目录失败%s\n",av_err2str(flag));
// 打开失败后直接跳转到fail
goto fail;
}
cnt = 0;
// 循环遍历读取目录中的每一个entry
while(1){
// 读取目录的一个entry,这里传入entry指针的指针,给entry分配空间
flag = avio_read_dir(ctx,&entry);
if(flag < 0){
av_log(NULL,AV_LOG_ERROR,"读取失败:%s\n",av_err2str(flag));
// 释放entry的内存
avio_free_directory_entry(&entry);
goto fail;
}
// 如果entry为空表明已经遍历完了
if(!entry){
break;
}
// 打印entry详细信息
av_log(NULL, AV_LOG_INFO, "%12"PRId64" %s\n",entry->size,entry->name);
// 释放entry内存
avio_free_directory_entry(&entry);
}
fail:
// 关闭目录(关闭目录就是释放内存,不释放会内存泄露)
avio_close_dir(&ctx);
return flag;
}