Ваша главная проблема заключается в том, что новая строка может не иметь такую же длину, как старая. Если вам нужно изменить длину строки, нет никакого способа переписать хотя бы весь файл после измененной строки. Самый простой способ - создать новый, измененный файл, а затем переместить его поверх оригинала. Таким образом, для читателей всегда доступен полный файл. Используйте блокировку, чтобы убедиться, что только один скрипт изменяет файл одновременно, и, поскольку вы собираетесь заменить файл, сделайте блокировку для другого файла. Выезд flock()
.
Если вы уверены, что длина новой строки будет такой же, как и у старой строки, вы можете открыть файл в режиме чтения / записи (используйте r+
в качестве второго аргумента для fopen()
) и вызовите ftell()
чтобы сохранить позицию, строка начинается каждый раз, прежде чем вы наберете fgets()
, чтобы прочитать строку. Как только вы найдете строку, которую хотите перезаписать, вы можете использовать fseek()
для возврата к началу строки и fwrite()
новые данные. Один из способов заставить линию всегда иметь одинаковую длину - это разместить ее на максимально возможной длине.