Linux根据关键字获取文件夹下文件完整名称(支持部分匹配)

*********************************************************************
根据关键字获取文件夹下文件完整名称(支持部分匹配)
pucSrcFilePath    (输入)待查找的文件路径
pucSrcFileName    (输入)待查找文件名称关键字
bFullPath         (输入)是否携带路径的完整名称  
pucDesFileName    (输出)文件完整名称  
*********************************************************************

long getFileName(char *pucSrcFilePath,  char *pucSrcFileName,  bool bFullPath,  char *pucDesFileName)
{
    long ulRet = 0;
    char szSysCmd[129] = {0};
    char szTmpBuf[64] = {0};
    char *pucStartAdd = null;
    char *pucEndAdd = null;
    char *pcFindfileNameRes = "/tmp/uAllFileName";
    pid_t status;
    FILE *pFile = null;  
    long ulLen = 0;

    if (0 != access(pucSrcFilePath, f_OK))
    {  
        //没有这个路径
       return -1;
    }
    snprintf(szSysCmd, 129, "find %s -name '*.txt' > %s", pucSrcFilePath, pcFindfileNameRes);
    status = system(szSysCmd);
    
    if(-1 == status)
    {
        //失败
    }
    else
    {
        if(WIFEXITED(status))
        {
            if(0 == WEXITSTATUS(status))
            {
                //检测到系统执行成功了
                pFile = fopen(pcFindfileNameRes, "r");
                if (null == pFile)
                {
                     printf("open file[%s] fail, error:%s", pcFindfileNameRes, strerror(errno));
                     return -1;
                }
                    
                if (null == fgets(szTmpBuf, sizeof(szTmpBuf), pFile))
                {
                    return -1;
                }

                do
                {
                    pucStartAdd =  strstr(szTmpBuf, pucSrcFileName);
                    if (null != pucStartAdd)
                    {
                        if(true == bFullPath)
                        {
                            ulLen += IMOS_strlen(pucSrcFilePath);    
                            strncpy(pucDesFileName, pucSrcFilePath, ulLen);
                        }

                        pucEndAdd = strstr(szTmpBuf, "\n");
                        if (null != pucEndAdd)
                        {
                              strncpy(pucDesFileName+ulLen, pucStartAdd, pucEndAdd- pucStartAdd);  
                        }
                        else
                        {
                              strcpy(pucDesFileName+ulLen, pucStartAdd);          
                        }

                        fclose(pFile);
                        return 0;    
                    }
                    memset(szTmpBuf,0, sizeof(szTmpBuf));
                }while(fgets(szTmpBuf, sizeof(szTmpBuf), pFile));

                fclose(pFile);

                //删除查找的文件
                memset(szSysCmd,0, sizeof(szSysCmd));
                snprintf(szSysCmd, 129, "rm -rf %s", pcFindfileNameRes);
                system(szSysCmd);
            }
        }
        else
        {
            printf("error %d", WIFEXITED(status));
            return -1;
        }
    }
    return ulRet;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值