1

我正在研究一个文件处理程序类,并且遇到了一些文件流问题。为诸如追加和覆盖之类的操作提供功能很简单,只需更改传递给 fopen 的模式即可。

然而,提供一种简单的插入、更新和删除方法被证明更具挑战性。几乎,我遇到的所有问题都与 fwrite 有关。

插入 - 据我所知,没有办法使用 fwrite 在文件末尾以外的位置插入字符。我提出的两个选项是使用 file_get_contents 和大量使用 fseek/fwrite 来扩展文件。

删除 - 不幸的是,尝试使用 fwrite 写入 NULL 与“删除”字符不同。与插入数据一样,选项又是 file_get_contents 和 fseek/fwrite。

更新 - 更新文件中的数据是插入/删除问题的组合。如果新值比旧值短,那么我必须删除额外的字符。如果新值比旧值长,我必须插入额外的字符。如果它们的长度相同,那么只需使用 fwrite 就可以了。

希望有一些我不知道的东西可以干净地解决这个问题。我发现的每个选项都使用 file_get_contents (我不关心,因为必须将整个文件读入内存)或大量使用 fseek/fwrite 来更改文件的长度(这对我来说似乎很复杂)。

有没有人有我没有想到的想法?

谢谢!

4

2 回答 2

1

您总是可以使用 fseek() 和 fwrite() 以固定大小的“块”来打乱文件,而不是使用 file_get_contents()。逻辑相当简单,但我怀疑如果直接在 PHP 中实现而不是作为 C 库来实现会很麻烦而且速度很慢。

于 2010-06-29T13:53:41.343 回答
1

而已。几乎每种语言都会以同样的方式做到这一点。推荐的方法是使用临时文件,并逐个传输原始文件,然后自动将临时文件移动到原始文件上。

但是,有些程序可以为您做这些事情,并且以更优化的方式 - 主要是数据库引擎。

于 2010-06-29T13:56:10.933 回答