我正在考虑编写文件I / O抽象。普通桌面操作系统的API是否支持从文件中的随机位置插入或删除?或者,如果我的界面提供,我是否必须手动调整文件中的每个字节?
答案 0 :(得分:0)
是的,你需要自己实施洗牌。
答案 1 :(得分:0)
不了解API本身。但是Memory mapped files上的Windows和Linux提供了这个设施。所以你可以把它包裹起来。
答案 2 :(得分:0)
使用C标准库,您可以打开具有写入权限的文件,然后调用fseek()
移动到特定位置,然后在该位置写入。请参阅fseek()
的手册页或其网页:http://linux.die.net/man/3/fseek
但是你只能覆盖。如果要插入或删除数据,则需要从该点重写整个文件。这效率不高。
因此,不使用文件,而是使用某种数据库。您可以插入记录并删除记录而无需重写文件:您只需重写一些索引。但是要读出数据,你需要使用数据库来遍历索引并以正确的顺序拉出记录。
在PalmOS上,我相信应用程序唯一可用的存储空间是数据库存储!但在大多数环境中,没有内置数据库;你需要安装一些东西。
我建议你从使用SQLite开始,因为它是公共域(完全免费用于任何用途)并且调试得很好。它的性能不会令人惊讶,但它会比完全重写文件以插入和删除内容更好。此外,由于SQLite非常流行,因此大多数编程语言都可以使用绑定。