怎么快速高效的读出csv文件从m行起始的n行数据? 着急哇。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没啥高效的办法,无非都是从头开始扫描,逐个地数 '\n' 的个数。要说快速嘛,CreateFileMapping() ? 快吗?也许,未必。————————————————————————————————基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :) 不好意思,忘了问了,你说的“快速高效”,是指“开发效率”还是“运行效率”? :)————————————————————————————————基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :) 很简单啊。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 ); }} 以上代码只能读取ANSI编码的文件。未考虑UNICODE,或者UTF-8等其他编码的情况。如果要搞一个任何编码都通吃的,那就比较复杂了,去参考一下文本编码规则吧。还有,以上代码无论是UNIX还是Windows格式的回车换行(Windows的回车是\r\n,UNIX的是\n\r),都可以处理,并且输出会统一为Windows格式。 请问如何用udp过http代理? 谁做过syn扫描的程序。。。帮忙下 (菜鸟问题)如何在vc里调用一个生成好的dll(c)呢?? 关于不同进程之间通信的问题 ????? 深入浅出mfc看书疑问? 新手提问提到没分了,请高手帮我解决下面这个问题 在directx中怎样改变媒体的播放速度? 请教一下虚拟码的问题 怎样实现平面滚动条? MFC的ASSERT错误?解决问题就给分 求助:VC的贴标签算法,, 在哪里可以下载到DirectX11 SDK
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
{
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 );
}
}