如何扩展内存映射文件的长度?

时间:2011-10-13 10:13:15

标签: delphi winapi memory-mapped-files

在Delphi 7中,我使用CreateFileMapping打开一个文件,然后使用MapViewOfFile获取指针。

如何扩展内存并在内存中添加一些字符并将其保存到该文件中?

我已经用适当的模式打开了文件(fmOpenReadWrite,PAGE_READWRITE), 如果我覆盖了字符,它会被保存到文件中,但我需要在文件中间添加额外的值。

2 个答案:

答案 0 :(得分:8)

如果文件映射由实际文件而不是内存块支持,那么您可以通过以下两种方式之一调整文件大小:

1)调用CreateFileMapping(),其大小超过当前文件大小。该文件将调整大小以匹配新映射。

2)使用SetFilePointer()SetEndOfFile()直接调整文件大小,然后使用新尺寸调用CreateFileMapping()

CreateFileMapping()的文档中描述了这两个条件。

答案 1 :(得分:3)

CreateFileMapping已创建时,您无法调整使用{{1}}创建的文件映射。请参阅前面关于该主题的讨论:Windows: Resize shared memory