【发布时间】:2011-03-09 15:36:42
【问题描述】:
我正在研究一个文件处理程序类,并且遇到了一些文件流问题。为追加和覆盖等操作提供功能只是更改传递给 fopen 的模式的简单问题。
但是,事实证明,提供一种简单的插入、更新和删除方法更具挑战性。几乎,我遇到的所有问题都与 fwrite 有关。
插入 - 据我所知,没有办法使用 fwrite 在文件末尾以外的位置插入字符。我想出的两个选项是使用 file_get_contents 和大量使用 fseek/fwrite 来扩展文件。
删除 - 不幸的是,尝试使用 fwrite 写入 NULL 与“删除”字符不同。与插入数据一样,选项仍然是 file_get_contents 和 fseek/fwrite。
更新 - 更新文件中的数据是插入/删除问题的组合。如果新值比旧值短,那么我必须删除额外的字符。如果新值比旧值长,我必须插入额外的字符。如果它们的长度相同,那么只需使用 fwrite 就可以了。
希望有一些我不知道的东西可以彻底解决这个问题。我发现的每个选项都使用 file_get_contents(我不在乎,因为必须将整个文件读入内存)或大量使用 fseek/fwrite 来更改文件的长度(这对我来说似乎很复杂)。
有没有人有我没想到的想法?
谢谢!
【问题讨论】:
-
我不能使用数据库收集?
-
没错。不幸的是,我必须处理平面文件而不是数据库。虽然,我希望在该类上获得一个足够干净的接口,以便它也可以用作数据库处理程序。