C/C++以行的方式读取文件

本文介绍如何使用C语言的fgets函数及C++的getline函数按行读取文件,并解析文件中的特定信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言以行的方式读取文件,可以使用fgets函数,例子如下:


int ReadFileByLine()
{
    std::string strPath = "C:\\StoragePath\\15A0ACF042B76706BD\\00\\20191217\\Update.txt";
    FILE *pFp = fopen(strPath.c_str(), "ab+");
    int nWriteCnt = 0;
    char szWrite[512] = "File Index=12323 Name=123.avi Path=F:/qq/745357068/FileRecv Size=122252 FileType=1 PUID=155282621597026847 \r\n";
    while(nWriteCnt < 100000)
    {
        fwrite(szWrite, sizeof(char), strlen(szWrite), pFp);
        nWriteCnt++;
    }
    fclose(pFp);

    DWORD nTime = GetTickCount();
    nWriteCnt = 0;
    char szBuff[1024] = {0};
    pFp = fopen(strPath.c_str(), "ab+");
    while(!feof(pFp))
    {
        nWriteCnt++;
        memset(szBuff, 0, sizeof(szBuff));
        fgets(szBuff, 1024, pFp);
        if (nWriteCnt %100 == 1)
        {
            printf("Read File Line = %d\n", nWriteCnt);
        }

        if (strlen(szBuff) == 0)
        {
            continue;
        }

        char *pBegin = strstr(szBuff, "Index") + 6; // strlen("Index=");
        char *pEnd = strstr(pBegin, " ");
        std::string strIndex(pBegin, pEnd-pBegin);

        pBegin = strstr(szBuff, "Name") + 5; //  strlen("Name=");
        pEnd = strstr(pBegin, " ");
        std::string strName(pBegin, pEnd - pBegin);

        pBegin = strstr(szBuff, "Path") + 5 ; //strlen("Path=");
        pEnd = strstr(pBegin, " ");
        std::string strPath(pBegin, pEnd - pBegin);

        pBegin = strstr(szBuff, "Size") + 5; // strlen("Size=");
        pEnd = strstr(pBegin, " ");
        std::string strSize(pBegin, pEnd - pBegin);

        pBegin = strstr(szBuff, "FileType") + 9; // strlen("FileType=");
        pEnd = strstr(pBegin, " ");
        std::string strFileType(pBegin, pEnd - pBegin);

        pBegin = strstr(szBuff, "PUID") +  5; // strlen("PUID=");
        pEnd = strstr(pBegin, " ");
        std::string strPUID(pBegin, pEnd - pBegin);

    }
}

先按照一定的结构,写入数据,然后再按照行的方式读取出数据并解析相关数据

 

C++除了兼容了fgets函数,还可以通过getline()函数,以流的方式一行一行的读取文件

int ReadFileByLine(const char *pFile)
{
    std::string strLine;
    int nExist = access(pFile, F_OK);
    if(nExist == 0)
    {
        ifstream inFile(pFile);
        while(std::getline(inFile, strLine))
        {
            std::cout<< strLine.c_str();
        }

        inFile.close();
    }

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值