对 r/w 中的文件进行多次访问

问题描述 投票:0回答:2

我计划编写一个程序,该程序必须以读/写方式多次访问某个文件。 所以我决定使用 fstream,因为我可以使用这个类来进行阅读和写作。

我的想法是在应用程序启动时打开文件,然后在应用程序关闭时关闭它。

由于文件可以任意大,我打算使用“分页”结构,其中:

1)为每个页面预分配固定数量的内存和固定数量的页面

2) 将部分文件加载到第一个空闲页面

3)如果没有空闲页面,我选择一个具有一定标准的非空页面,我提交其中的所有编辑(如果有的话),然后加载页面中的文件部分。

编码并不难。但我想知道我是否要重新发明轮子......也许 fstream 本身是以一种聪明的方式编写的,因此它也实现了类似的分页机制。既然如此,我就不管了,随时写,随时读。

有什么建议吗?

c++ pagination fstream
2个回答
1
投票

不要自己这样做。除非您使用非常奇特的实现,否则 fstream 类已经有效地实现了这种机制。

查看 http://www.cplusplus.com/doc/tutorial/files/“缓冲区和同步”

如果您使用旧内核或标准库的实现来

seek
进入大于2GB的文件,则可能会出现问题。检查这个 C++ 中的大文件支持 或使用 Boost.Filesystem


1
投票

标准 C++ 库的内部工作因实现而异。因此,需要进行测试才能在您的首选平台上获取一些真实数据。一般来说,“内存映射文件”被认为是访问文件中存储的数据的最快方法(正如 Uflex 在他的评论中提到的那样,但它也有一些缺点(请参阅链接的 wiki 页面)。您可以使用标准(POSIX) C 函数 mmap()

munmap()
,或
Boost C++ 库
,它还具有用于内存映射文件的可移植 C++ 接口。

© www.soinside.com 2019 - 2024. All rights reserved.