QT 读文件 从某行开始读取

ailinty 2010-10-14 10:09:48
QT 读文件 从某行开始读取,有什么方法?

QFile file;
file.setFileName(":resources/input/py.txt");
if( !file.open(QIODevice::ReadOnly) )
QMessageBox::warning(0,tr("加载错误"),tr("无法加载字符编码,请检查文件是否有效!"));

while(!file.atEnd())
{
QByteArray data = file.readLine();
QString s = data.data();
}
file.seek(0);

这样只能从文件头读到尾,效率太低,我想读某几行,怎么弄?
是不是用file.seek(?). 而seek是跳过N个字符,怎么跳过N行呢?
...全文
2420 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DIE654456 2010-10-15
  • 打赏
  • 举报
回复
file.seek(?). 而seek是跳过N个字符,怎么跳过N行呢?

while ( 计数器< N )
{
读取文件内容到缓冲中,
一个一个字符判断,
假如读到的字符是换行回车\n,
计数器++,
}
这个时候的ftell位置应该就是你想要的第N行开始位置?
ailinty 2010-10-15
  • 打赏
  • 举报
回复
谢谢大家的回答。
Applic 2010-10-15
  • 打赏
  • 举报
回复
这根本不是性能所在,而在于内核I/O等待等因素,自己可以看看相关方面的书籍,任何平台核心、并发、多核、网络等编程书籍都会讲到这些问题
Fortran和Ada语言倒是可以进行这样的直接I/O
lzx250756784 2010-10-15
  • 打赏
  • 举报
回复
试了好多 好像都有问题啊
aoxuehan0424 2010-10-14
  • 打赏
  • 举报
回复
我觉得如果你能将文件指针指到第N行,那么说明第N行的内容之前已经在内存中,或者说有个索引来指向每行的其实地址。 这都建立在你已经便利过N行前面的内容的基础上的。。。
个人认为没有什么方法吧。

等高人来看看有不有方法。
ailinty 2010-10-14
  • 打赏
  • 举报
回复
我想到了一个办法,for(int i=0;i<startPos;i++) file.readLine();
for(int i=startPos; i<endPos; i++) QString s = file.readLine().data();
其实跟没写之前一样是不是啊,呵呵,我想不到其他方法了,大侠们开来支招。领教!
dbzhang800 2010-10-14
  • 打赏
  • 举报
回复
没有办法

16,794

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧