txt文件中保存内容为"012356789",我想在3和5中间插入字符"4",使文件内容变成"0123456789"。
我用fseek($fp,4)定位到3的位置,然后fwrite($fp,4)会把后面的5替换掉。因为文件很大,所以不可能全部重写3以后的字符。
有没有更好的方法完成插入操作呢?

解决方案 »

  1.   

    $newContent = preg_replace("/(3)(5)/is", "\\1"."4"."\\2", file_get_contents($filename));
    fwrite($fp, $newContent);
      

  2.   

    没有什么规律,看来不能在文件中完成插入操作。
    换个问题,有没有人了解树的结构如何具体在文件中存储的?比如Btree,按照缩进来确立父子关系吗?
      

  3.   

    没有更好的办法,txt文件是顺序结构你必须向后移动插入点以后的内容。
    其实也是很方便的。$ch = '4';
    $offs = 4;
    $len = strlen($ch);$fp = fopen($filename, 'r+');
    fseek($fp, $offs, SEEK_SET);
    $buf = fread($fp, $len);
    do {
      fseek($fp, -$len, SEEK_CUR);
      fwrite($fp, $ch);
      $ch = $buf;
    } while($buf = fread($fp, $len));
    fwrite($fp, $ch);
    fclose($fp);
      

  4.   

    文件不会只有一行吧??
    你一行行的读,再替换呢。fseek($fp,3)或者你定位到3
    fwrite($fp, '345');不知道可以不
      

  5.   

    [Quote=引用 7 楼 dingsongtao 的回复:]文件不会只有一行吧??
    你一行行的读,再替换呢。fseek($fp,3)或者你定位到3
    fwrite($fp, '345');不知道可以不
    [/Quote
    这样会把"56"替换成"45"
      

  6.   

    每次只缓存strlen($ch)长度的字符,学习了。。
    谢谢老大