九月 7th, 2009

使用Qt读取大文件最后一行

679 views, Qt, by Allen Dang.

正在写的一个小软件需要这样一个功能,在开始一个新的下载任务前,先尝试在本地寻找是否已经存在同名文件。如果有,那读取文件最后一行文本,这行文本里面记录了上次下载的一些信息,然后从断点开始继续下载。

最后一行文本的格式很简单,就是[页码|行号],例如[160|8]就代表160页第8行。

读取的基本思路就是,先把文件指针移动到距离文件尾部20个字节的地方(这里留20个字节是因为我的最后一行信息很简单),然后循环读取每一行,最后一次读取到的就是最后一行文本。

目标文本文件最后一行如下:

[160|8]

具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
QFile file("C:\\test.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
	qint64 len = file.size();
 
	QTextStream reader(&file);
	QString lastLine;
	if (reader.seek(len-20))
	{
		while (!reader.atEnd())
		{
			lastLine = reader.readLine();
		}
	}
 
	file.close();
 
	QRegExp re("\\[(\\d+)\\|(\\d+)\\]");
	if (re.indexIn(lastLine, 0) != -1)
	{
		QString page = re.cap(1); //page = 160
		QString pos = re.cap(2); //pos = 8
	}
}

任务完成!

Back Top

浅谈.NET Micro Framework的性能优化。 小工具 – 天涯帖子抓取器

Responses to “使用Qt读取大文件最后一行”

  1. 没有任何评论。
  1. 没有任何引用。

发表回复

Back Top