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;
}
上一篇 下一篇

猜你喜欢

热点阅读