我正在处理一个文件处理程序类,并遇到一些文件流的问题。提供诸如追加和覆盖等操作的功能是改变传递给fopen的模式的一个简单问题。PHP - fwrite的缺点?
但是,提供插入,更新和删除的简单方法被证明是更具挑战性的。几乎所有我遇到的问题都是使用fwrite。
插入 - 据我所知,没有办法使用fwrite在文件末尾以外的位置插入字符。我提出的两个选项是使用file_get_contents并大量使用fseek/fwrite来扩展文件。
删除 - 不幸的是,试图用fwrite编写NULL与'删除'字符不是一回事。就像插入数据一样,选项也是file_get_contents和fseek/fwrite。
更新 - 更新文件内的数据是插入/删除问题的组合。如果新值比旧值更短,那么我必须删除其他字符。如果新值比旧值长,我不得不插入其他字符。如果它们的长度相同,那么只需使用fwrite就可以。
希望有一些我不知道哪些可以干净地解决这个问题。我发现的每个选项都使用file_get_contents(我不在乎,因为整个文件必须读入内存),或者大量使用fseek/fwrite来更改文件的长度(这似乎令人费解)。
有没有人有一个想法,我没有想到?
谢谢!
我收集使用数据库不是一个选项? – 2010-06-29 13:53:31
这是正确的。不幸的是,我不得不处理平面文件而不是数据库。虽然,我希望在类上获得足够干净的接口,以便它可以作为数据库处理程序重用。 – Ogo 2010-06-29 14:13:19