目录、文件的创建、读取、判断例程

{
    FILE *fBackup = NULL;
    struct dirent *dp = NULL;
    DIR *pdir = NULL;
    int retval = 0;
    char *pChr = NULL;
    mode_t mode = 0;
    UINT16 devID = 0;
    UINT16 fileNum = 0;
    char fileName[50];
    char strDevID[10];
    IRARRAY_CTRL *pCtrl = NULL;
    ERR ret = OK;
    UINT32 len = 0;

    /* 参数判断 */
    if (chan > irChanNum)
    {
        PRT(PRT_ERR, "%s: at Line:%d input param is NULL \r\n", __FUNCTION__, __LINE__);
        return ERR_DSP_INVALID_PARAM;
    }

    pCtrl = irCtrl + chan;
    devID = pCtrl->devID;
    
    do 
    {
        /* 检测目录是否存在 */
        retval = access("./backup", F_OK);
        if(retval != 0)
        {
            /* 不存在则创建新目录 */
            mode = umask(0);
            mkdir("./backup", 0777);
            umask(mode);
            Task_sleep(1);  //等待文件创建,否则有概率导致文件流读取失败
        }
        
        /* 获取目录下的文件流 */
        pdir = opendir("./backup");
        if (pdir == NULL)
        {
            PRT(PRT_ERR, "%s at line:%d opendir Err!%s\n",__FUNCTION__, __LINE__, strerror(errno));
            return ERR_DSP_FAILED_PROCESS;
        }
        
        /* 轮询文件流,查找当前传感器是否备份 */
        sprintf(fileName, "DevID_");
        sprintf(strDevID, "%x", devID); /* 获取设备ID */
        while(1)
        {
            /* 获取一个文件指针 */
            dp = readdir(pdir);
            if (dp == NULL)
            {
                /* 文件流结尾退出循环 */
                break;
            }
            
            /* 检查文件名 */
            pChr = strstr(dp->d_name, fileName);
            if ((pChr == NULL) || (pChr != dp->d_name))
            {
                /* 找不到"DevID_"字符串,或返回指针不是文件名的头指针,判断为其他文件跳过 */
                continue;
            }
            pChr = pChr + strlen(fileName); /* 指向文件ID号 */
            /* 检查文件名ID */
            if (strcmp(strDevID, pChr) == 0)
            {
                fileNum++;
                break;
            }
        }
        closedir(pdir);
    }while (0);

    /* 已备份,退出 */
    if (fileNum != 0)
    {
        return OK;
    }

    ret = IRARRAY_DumpEE(chan, pCtrl->dumpEE);
    if (ret != OK)
    {
        PRT(PRT_ERR, "%s at line:%d Err!%s\n",__FUNCTION__, __LINE__);
        return ERR_DSP_FAILED_PROCESS;
    }

    do 
    {
        sprintf(fileName, "./backup/DevID_%x", devID);
        fBackup = fopen(fileName, "wb+");
        if (fBackup == NULL)
        {
            PRT(PRT_ERR, "%s at line:%d fopen Err!%s\n",__FUNCTION__, __LINE__, strerror(errno));
            return ERR_DSP_FAILED_PROCESS;
        }
        len = sizeof(pCtrl->dumpEE);
        retval = fwrite((void *)pCtrl->dumpEE, 1, len, fBackup);
        if (retval != len)
        {
            PRT(PRT_ERR, "%s at line:%d, write:%d, Need:%d !%s\n",__FUNCTION__, __LINE__, retval, len);
            ret = ERR_DSP_FAILED_PROCESS;
            break;
        }
        PRT(PRT_INFO," Backup DevId:%x OK !\n", devID);
    }while(0);
    fclose(fBackup);
    fBackup = NULL;

    return ret;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值