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;
}