FFmpeg 提供了丰富的API供我们使用,下面我们来讲述一下文件操作相关的API:
- FFmpeg 删除文件:avpriv_io_delete()
- FFmpeg 重命名文件:avpriv_io_move()
- FFmpeg 打开目录:avio_open_dir()
- FFmpeg 读取目录:avio_read_dir();
- FFmpeg 关闭目录:avio_close_dir()
使用FFmpeg文件操作API实现删除和重命名的实例代码如下:
1// FFmpeg 删除文件操作 2void ffmpegDelFile() { 3 int ret; 4 ret = avpriv_io_delete("1.txt"); // 在项目目录下创建的文件(测试时需要创建好) 5 printf("Del File Code : %d \n", ret); 6 if (ret < 0) { 7 av_log(NULL, AV_LOG_ERROR, "Failed to delete file \n"); 8 } else { 9 av_log(NULL, AV_LOG_INFO, "Delete File Success!\n "); 10 } 11} 12 13// FFmpeg 重命名或移动文件 14void ffmpegMoveFile(char* src, char* dst) { 15 int ret; 16 ret = avpriv_io_move(src, dst); 17 printf("Move File Code : %d \n", ret); 18 // 重命名时,如果文件不存在,ret也会0 19 if (ret < 0) { 20 av_log(NULL, AV_LOG_ERROR, "Failed to Move File %s!\n ", src); 21 } else { 22 av_log(NULL, AV_LOG_INFO, "Success Move File %s!\n", src); 23 } 24}
使用FFmpeg文件操作API实现读取文件目录及输出文件目录List的相关代码如下:
1// FFmpeg 目录操作 2void ffmpegDir() { 3 4 int ret; 5 6 // 上下文 7 AVIODirContext *dirCtx = NULL; 8 AVIODirEntry *dirEntry = NULL; 9 10 // 注意Windows下会返回-40,也就是Function not implement,方法未实现,也就是说windows下不支持此方法 11 ret = avio_open_dir(&dirCtx, "include", NULL); 12 13 if (ret < 0) { 14 // 输出错误日志 15 printf("cant open dir,msg = %s", av_err2str(ret)); 16 return; 17 } 18 19 av_log(NULL, AV_LOG_INFO, "Open Dir Success!"); 20 21 while (1){ 22 ret = avio_read_dir(dirCtx, &dirEntry); 23 if (ret < 0) { 24 printf("cant read dir : %s", av_err2str(ret)); 25 // 防止内存泄漏 26 goto __failed; 27 } 28 av_log(NULL, AV_LOG_INFO, "read dir success"); 29 if (!dirEntry) { 30 break; 31 } 32 printf("Entry Name = %s", dirEntry->name); 33 // 释放资源 34 avio_free_directory_entry(&dirEntry); 35 } 36// 释放资源 37__failed: 38 avio_close_dir(&dirCtx); 39}