C++中fopen的句柄返回NULL
我们在使用fopen打开文件的时候有时会出现失败返回null情况,但是我们不能直接通过log具体是什么原因导致的,所以这时我们可以通过errno
和strerror
获取错误码和错误信息。
我遇到的是错误码1,Operation not permitted。
经过检查是Android11,分区存储,不能直接写到sdcard,后面修改为直接用app目录,就正常了
Context.getExternalFilesDir(null).getAbsolutePath(); //不需要权限/storage/emulated/0/Android/data/[appname]/files/
常见的errno
错误码有以下这些:
#define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EIO 5 /* I/O error */ #define ENXIO 6 /* No such device or address */ #define E2BIG 7 /* Argument list too long */ #define ENOEXEC 8 /* Exec format error */ #define EBADF 9 /* Bad file number */ #define ECHILD 10 /* No child processes */
#include "File.h" #include <cerrno> #include <cstring> #include "Log.h" void saveYuvFile(const uint8_t* data, int width, int height, const char* filePath){ if (data == nullptr) return; FILE* fp = fopen(filePath, "w"); int errNum = 0; if (fp == nullptr){ errNum = errno; LOGE("[saveYuvFile] open fail errno = %d, reason = %s", errNum, strerror(errNum)); return; } size_t dataSize = width * height * 3 / 2; fwrite(data, sizeof(uint8_t), dataSize, fp); fclose(fp); }
参考:https://blog.csdn.net/xu20082100226/article/details/121406513
分类:
C/C++
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!