美文网首页
C++中fopen的句柄返回NULL

C++中fopen的句柄返回NULL

作者: 咸鱼Jay | 来源:发表于2023-03-13 19:26 被阅读0次

    我们在使用fopen打开文件的时候有时会出现失败返回null情况,但是我们不能直接通过log具体是什么原因导致的,所以这时我们可以通过errnostrerror获取错误码和错误信息。
    我遇到的是错误码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++中fopen的句柄返回NULL

          本文链接:https://www.haomeiwen.com/subject/upncrdtx.html