16,472
社区成员
发帖
与我相关
我的任务
分享
void ReadSomeLines( LPCTSTR lpszSrcFile, LPCTSTR lpszTagFile, int nStartLine, int nLines )
{
HANDLE hSrc = INVALID_HANDLE_VALUE;
HANDLE hTag = INVALID_HANDLE_VALUE;
int nCurLines = 0;
BOOL bSaved = ( nStartLine == 0 );
DWORD dwReaded;
__try
{
hSrc = CreateFile( GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if( hSrc == INVALID_HANDLE_VALUE )
__leave;
hTag = CreateFile( GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
if( hTag == INVALID_HANDLE_VALUE )
__leave;
char c;
while( ReadFile( hSrc, &c, 1, &dwReaded, NULL ))
{
if( dwReaded != 1 )
break;
if( c == '\n' )
{
++ nCurLines;
if( bSaved )
{
c = '\r';
WriteFile( hTag, &c, 1, &dwReaded, NULL );
c = '\n';
WriteFile( hTag, &c, 1, &dwReaded, NULL );
if( nCurLines > nStartLine + nLines )
{
bSaved = FALSE;
__leave;
}
}
else
{
if( nCurLines == nStartLLine )
bSaved = TRUE;
}
}
else if( c == '\r' )
continue;
else
{
if( bSaved )
WriteFile( hTag, &c, 1, &dwReaded, NULL );
}
}
}
__finally
{
if( hTag != INVALID_HANDLE_VALUE )
CloseHandle( hTag );
if( hSrc != INVALID_HANDLE_VALUE )
CloseHandle( hSrc );
}
}