|
|
|
|
$fp = fopen( $name_file, "r+");
for ($x=0; $x<3000; $x++) {
$i++;
$str= fgets($fp);
if(«проверка ») {
fputs($fp,$str );
}
}
|
У меня большие файлы. Перезапись в другой файл и замена копированием требует удвоения места на диске.
Можно ли "в себя" перезаписывать файл?
Как правильно сделать, что бы было корректно?
(массивы из-за размера не получится) | |
|
|
|
|
|
|
|
для: Valleri
(03.07.2011 в 10:21)
| | А что с файлом происходит, каким изменениям вы его подвергаете? Если это строковые данные, то скорее всего нельзя, придется хотя бы на короткое время создавать копию файла. | |
|
|
|
|
|
|
|
для: cheops
(03.07.2011 в 13:42)
| | Необходимо в файле удалить программно строку.
Проблема в том, что
1 - файл большой,
2 - в массив не загрузить,
3 - временный файл займет много места,
4 - приведенный код кромсает файл. | |
|
|
|
|
|
|
|
для: Valleri
(03.07.2011 в 19:01)
| | Положение строки произвольно? Или примерно известно, что она практически всегда вначале или практически всегда в конце? Это я к тому, что можно сделать копию содержимого меньшей части, возможно она даже уберется в памяти и попробовать оперировать ей. | |
|
|
|
|
|
|
|
для: cheops
(03.07.2011 в 19:38)
| | Можно попытаться адаптировать под начало или конец строки, но это надо подвергнуть испытанию временем.
Нет выхода????? | |
|
|
|
|
|
|
|
для: Valleri
(03.07.2011 в 19:54)
| | В больших системах не удаляют данные, а просто стирают их, оставляя пустоты, которые удаляют процедурой дефрагментации. При этом новые данные пишут в конец. Впрочем, тут уже проще воспользоваться в базой данных, где такой движок доведен до ума и из него в плане производительности выжали все, что можно. | |
|
|
|
|
|
|
|
для: cheops
(03.07.2011 в 21:14)
| | В dbf, пометка делается, но это ничего не дает | |
|
|
|