【发布时间】:2011-08-28 10:12:44
【问题描述】:
我在与一个巨大的固定长度记录数据文件交互时遇到了问题。该文件的大小超过 14 GB。当我看到 System.Filesize() 函数的返回值远小于大文件中的实际记录数时,我首先注意到一个问题,考虑到文件中的字节数和每条记录的长度。 (给定在Reset() 调用期间指定的记录大小,System.Filesize 返回无类型文件中的记录数。它不返回文件中的字节数)。我将其归结为 System.Filesize() 的返回类型是 Longint 而不是 Int64。
我通过调用GetFileSizeEx() 并自己计算记录数来解决最初的问题。不幸的是,BlockRead() 在尝试访问文件中偏移量在文件深处的记录时也会失败。我猜想再次有正在使用的值在代码中的某处溢出。
那里有可以处理大型文件的 Delphi 6 替代模块,并且可以替代系统单元文件 I/O 调用吗?如果可以的话,我会尽量避免自己动手。
【问题讨论】:
-
14 gb ¡¡¡ 您必须考虑使用数据库。
-
也有访问文件的流。但我不记得它们是否支持 >2GB 的文件。
-
Streams 支持大文件已有十多年了,@Code。请参阅
TStream,以及Seek的两个伪抽象实现。 -
我会查看生成 14GB 文件的架构或第三方提供商。除了快速解决方案之外,这里真正的问题是存储/访问数据的方法比使用 14GB 文件要好得多!
标签: delphi int64 large-data