如何扩展内存映射文件的长度?
在 Delphi 7 中,我使用 CreateFileMapping 打开一个文件,然后使用 MapViewOfFile 获取指针。
如何扩展内存并向内存添加一些字符并将其保存到该文件中?
我已经使用适当的模式打开了文件(fmOpenReadWrite、PAGE_READWRITE), 如果我覆盖字符,它会保存到文件中,但我需要在文件中间添加额外的值。
In Delphi 7, I open a file with CreateFileMapping then get a pointer by using MapViewOfFile.
How can I expand the memory and add some characters to the memory and have it saved to that file?
I have already opened the file with appropriate modes (fmOpenReadWrite, PAGE_READWRITE),
and if I overwrite the characters, it gets saved to the file, but I need to add extra values in the middle of the file.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果文件映射由实际文件而不是内存块支持,则可以通过以下两种方式之一调整文件大小:
调用
CreateFileMapping()
,大小超过当前大小文件大小。该文件将调整大小以匹配新的映射。使用
SetFilePointer()
和SetEndOfFile()
直接调整文件大小,然后使用新大小调用CreateFileMapping()
。 p>CreateFileMapping()
的文档中描述了这两种情况。If the file mapping is backed by an actual file and not a block of memory, then you can resize the file in one of two ways:
call
CreateFileMapping()
with a size that exceeds the current file size. The file will be resized to match the new mapping.use
SetFilePointer()
andSetEndOfFile()
to resize the file directly, then callCreateFileMapping()
with the new size.Both conditions are described in the documentation for
CreateFileMapping()
.如果已经创建了使用
CreateFileMapping
创建的文件映射,则无法调整其大小。请参阅之前有关该主题的讨论:Windows:调整共享内存大小。You cannot resize file mapping created with
CreateFileMapping
when it's already created. See earlier discussion on the topic: Windows: Resize shared memory .