1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
if ((filename == NULL) || ((int)strlen(filename) == 0)) return false;
char *BufFile = NULL;
HANDLE hFile;
ULONG numread;
ULONG nLen = 0;
TCHAR szLineFilter[TEXTBUFSIZE];
hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if(hFile == INVALID_HANDLE_VALUE)
{
return false;
}
if((nLen = GetFileSize(hFile, 0)) == 0)
{
CloseHandle(hFile);
return false;
}
if((BufFile = new char[nLen+1]) == 0)
{
CloseHandle(hFile);
return false;
}
if((buffer = new char[nLen+1]) == 0)
{
CloseHandle(hFile);
return false;
}
ReadFile(hFile, BufFile, nLen, &numread, 0);
BufFile[nLen] = '\0';
ULONG nLine = 0;
ULONG nCurIndex = 0;
ULONG nPos = 0;
ULONG i;
ULONG nTotalBytes = 0;
ULONG nRead = 0;
for(i = 0; i < nLen; )
{
if(BufFile[i] == '\r') //Next line
{
// carriage-return / line-feed combination
if(BufFile[i+1] == '\n')
i++;
nLine = ++i; //Index next line
strncpy_s(szLineFilter, TEXTBUFSIZE, &BufFile[nCurIndex], nLine - nCurIndex);
if (strstr(szLineFilter, m_szFilter)) //Filter found
{
nRead = nLine - nCurIndex;
memcpy(buffer + nTotalBytes, szLineFilter, nRead);
nTotalBytes += nRead;
nCurIndex = nLine;
} else nCurIndex = nLine;
}
else if(BufFile[i] == '\n') //Next line
{
nLine = ++i;
strncpy_s(szLineFilter, TEXTBUFSIZE, &BufFile[nCurIndex], nLine - nCurIndex);
if (strstr(szLineFilter, m_szFilter)) //Filter found
{
nRead = nLine - nCurIndex;
memcpy(buffer + nTotalBytes, szLineFilter, nRead);
nTotalBytes += nRead;
nCurIndex = nLine;
} else nCurIndex = nLine;
}
else
{
i++;
}
if(i >= nLen) //Last read
{
nLine = i;
strncpy_s(szLineFilter, TEXTBUFSIZE, &BufFile[nCurIndex], nLine - nCurIndex);
if (strstr(szLineFilter, m_szFilter)) //Filter found
{
nRead = nLine - nCurIndex;
memcpy(buffer + nTotalBytes, szLineFilter, nRead);
nTotalBytes += nRead;
}
}
}
buffer[nTotalBytes] = '\0';
length = (ULONG)strlen(buffer);
CloseHandle(hFile);
delete[] BufFile;
BufFile = 0; |
Partager