ffmpeg文件操作
文件操作所在的头文件libavformat/avformat.h
文件的删除与重命名
- avpriv_io_delete()
- avpriv_io_move() 重命名和移动目录
我们看下使用
#include<libavformat/avformat.h>
#include<libavutil/log.h>
#include<stdio.h>
void deleteFile(){
char* filename = "./test_file.txt";
int result = avpriv_io_delete(filename);
if(result == 0){
av_log(NULL, AV_LOG_ERROR, "delete file success\n");
}else{
av_log(NULL, AV_LOG_ERROR, "delete file fail\n");
}
}
void moveFile(){
char* filename = "./dst.txt";
char* dst_filename = "/Users/yuanxuzhen/study/mac/ffmpeg_demo/dst.txt";
int result = avpriv_io_move(filename, dst_filename);
if(result == 0){
av_log(NULL, AV_LOG_ERROR, "move file success\n");
}else{
av_log(NULL, AV_LOG_ERROR, "move file fail\n");
}
}
int main(int argc, char * argv[]){
av_log_set_level(AV_LOG_ERROR);
deleteFile();
moveFile();
return 0;
}
ffmpeg 目录操作相关
目录操作
- avio_open_dir() 打开目录
- avio_close_dir() 关闭目录
- avio_read_dir() 读目录到entry
-
avio_free_directory_entry() 释放entry
-
AVIODirContext 目录上下文,读,释放都要使用到这个context
-
AVIODirEntry 目录项目上下文
#include <libavutil/log.h>
#include <libavformat/avio.h>
int main(int argc, char *argv[])
{
char *dir = "./";
int ret = 0;
AVIODirContext *av_dir_context = NULL;
AVIODirEntry *av_dir_entry = NULL;
av_log_set_level(AV_LOG_INFO);
ret = avio_open_dir(&av_dir_context, dir, NULL);
if (ret < 0)
{
av_log(NULL, AV_LOG_ERROR, "can't open dir: %s\n", av_err2str(ret));
goto __ERROR;
}
while (1)
{
ret = avio_read_dir(av_dir_context, &av_dir_entry);
if (ret < 0)
{
av_log(NULL, AV_LOG_ERROR, "can't read dir: %s\n", av_err2str(ret));
goto __ERROR;
}
if(!av_dir_entry){
break;
}
av_log(NULL, AV_LOG_INFO, "%-12"PRId64"%s\n", av_dir_entry->size, av_dir_entry->name);
avio_free_directory_entry(&av_dir_entry);
}
__ERROR:
if (av_dir_context != NULL)
{
avio_close_dir(&av_dir_context);
}
return 0;
}
av_log(NULL, AV_LOG_INFO, "%-12"PRId64"%s\n", av_dir_entry->size, av_dir_entry->name);
"%-12"PRId64"%s\n" 实际上是 "%-12lld%s"
%lld 输出64位的数字
%-12lld 做对齐,最少输出12位,不够12位右侧补0