2010-02-01 71 views
0

我有一个非常大的文件,我需要解析,因此将其读入内存中的所有一次是不理想的。文件结构的方式,如果我可以从eof开始并开始,那将会容易得多。有没有人有这样做的好方法?我正在使用Visual Studio 2008和C++。由于C++读取文件顶部

+0

此文件是否有固定长度记录?如果是这样,考虑随机访问。 – 2010-02-01 16:43:53

+0

@Liz - 遗憾的是没有 – Steve 2010-02-01 16:50:04

+0

在这种情况下,你必须读取来自EOF [一定数量的字节],然后分析要多阅读。你最终会使用seek/tell/get的组合,这可能会很慢。我不知道这是否会比在整个文件中读取更好或更差。你考虑过内存映射文件吗? – 2010-02-01 17:04:08

回答

7

如果您的操作系统支持的话,可以考虑使用内存映射文件。然后,您可以将文件内容视为非常大的字节数组,操作系统会根据需要管理将数据带入内存(并释放它)。

1

这是不可能使每个读/写后的位置“减量”,而不是增量。这就是为什么你只有EOF,而不是SOF。唯一的方法是在每次读取或写入之后调用fseek/seekg()/ seekp()来撤消位置更改,但这会非常缓慢。

1

商店在首位相反的顺序文件。

+0

如果只有我可以 – Steve 2010-02-01 18:39:28

0

如果你打算这么做很多如何创建一个反向BufferedInputStream类 - 你将能够给这个措施控制文件的每个块在缓冲区中的大小,并隐藏所有内务管理客户。

什么其他人所说的关于每个实际的文件后,我重新定位/ O仍然有效 - 这只会提高可用性,而不是性能。