对r/w中的文件进行多重访问
multiple access to file in r/w
我计划写一个程序,它必须在r/w中多次访问某个文件。所以我决定使用fstream,因为我可以将这个类用于阅读和写作目的。
我的想法是在应用程序启动时打开文件,然后在应用程序关闭时关闭它。
由于文件可以任意大,我计划使用"分页"结构,其中:
1) 为每个页面预先分配固定数量的内存和固定数量的页面
2) 将文件的一部分加载到第一个可用页面
3) 如果没有可用的页面,我选择一个具有特定条件的非空页面,我在其中提交所有编辑(如果有),然后加载页面中的文件部分。
这并不难编码。但我想知道我是否要重新发明轮子。。。也许fstream本身是以智能的方式编写的,因此它也实现了类似的分页机制。如果是那样的话,我不会在意,只是随时写作和阅读。
有什么建议吗?
不要自己动手。除非您使用非常奇特的实现,否则fstream类已经高效地实现了这样的机制。
签出http://www.cplusplus.com/doc/tutorial/files/"缓冲区和同步">
如果使用旧内核或标准库的实现seek
处理大于2GB的文件,则可能会出现问题。检查这个C中的大文件支持++或使用Boost.Filesystem
标准C++库的内部工作因实现而异。因此,需要进行测试,以便在您喜欢的平台上获得一些真实数据。通常,内存映射文件被认为是访问存储在文件中的数据的最快方式(正如Uflex在评论中提到的,但它也有一些缺点(请参阅链接的wiki页面)。您可以使用标准(POSIX)C函数mmap()
和munmap()
,也可以使用Boost C++库,这些库还具有用于内存映射文件的可移植C++接口。
相关文章:
- C ++程序编译错误,找不到/访问文件
- 从文件读取,并循环访问文件以写入数组
- 确实可以提高directory_iterator在Windows上按字母顺序访问文件和文件夹
- 如何在 bash 中使用管道在 c++ 中使用 getenv() 访问文件?
- 循环访问文件的每一行
- 无法从另一个函数访问文件范围变量的内容
- 如何访问文件的二进制数据?
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- C++ 写入随机访问文件
- 无法从.cpp访问 .h 文件中的私有成员变量
- boost :: filesystem :: verver()无法访问文件,因为另一个过程正在使用该文件
- 如何在 Qt/C++ 中仅将文件路径作为字符串访问文件
- 如何从 JAVA 程序中访问文件中定义的类.DLL方法
- 如何访问 C 文件中C++公共布尔类成员(进行验证)
- 随机访问文件格式,用于分层组织的二进制文件和文本文件
- 连接到 FTP 服务器并访问文件
- 频繁访问文件映射内存
- 'Good'通过条目维护/更新/访问文件的编程形式
- 访问文件中的单个字符效率低下?(C++)
- wxwidgets类访问文件属性