delphi - TINiFile 的最大文件大小是多少?
问题描述
我的程序使用 TINiFile 操作一个 ini 文件。我读过TINiFile 类在单个部分中有 64kb 的限制。但是,在我的测试中,它似乎工作了超过 100kb。我正在使用 Delphi 10.3.3 和 Windows 10。
64kb 限制是否仅存在于旧版本的 Windows 中?或者,我应该使用 TMemIniFile 来保证安全吗?
解决方案
GetPrivateProfileString
基本上,对 ini 文件或例程(用于TIniFile
读取数据)的大小没有限制。但是在使用时有一些限制和需要考虑的事情TIniFile
。
查看TIniFile
实现的代码(感谢 Delphi),有几个地方GetPrivateProfileString
用于从 ini 文件中检索数据。
在TIniFile.ReadString
缓冲区大小固定为 2048 (2k) 用于读取字符串值。由于所有其他“值”请求例程都使用此例程从 inifile 实际读取数据,因此它基本上限制了所有这些例程的缓冲区大小。
其次,该TIniFile.ReadSections
例程使用 16384 (16k) 个字符的起始缓冲区。但是当这个缓冲区太小时,它会使用一个基于文件大小的动态缓冲区,所以这样你就不会遇到缓冲区问题(但是因为这实际上是读取整个文件来估计缓冲区大小,这将是大型ini文件非常慢)。
最后是TIniFile.ReadSection
例程,它使用 1024 (1k) 的初始缓冲区大小。但在需要时动态分配更大的缓冲区。所以在这一点上,(文件)大小似乎也没有限制。
注意:此信息基于德里 10.3 和 Delphi XE2。在旧版本中,我们还有其他缓冲区分配策略......
推荐阅读
- ansible - 如何在ansible上用OR很好地分割多行长条件?
- tensorflow - 如何使用 Keras 加载图像以解决分类问题
- xamarin.forms - 在 Xamarin 表单中调用 DisplayALert() 时出现异常
- c# - NHibernate MappingException:找不到持久类 TodoLog
- reactjs - 从reactjs中的API获取数据后如何导出变量?
- sql - 从 sql 列计算总工作时间
- logging - 尽管 log.retention.hours=168 昨天发送的消息的日志文件不存在
- java - 使用 jUnit 测试 RESTful Api 时出现 java.lang.NullPointerException
- jxls - 如何使条件格式与 jxls 一起使用
- html - 表格元素与 div 的 React/HTML 最佳实践