работа с потоками
Работаю с файлом через потоки. Все ничего, но надо в середине файла отредактировать строку (что-то удалить, что-то добавить). Подскажите, как можно добиться сего. Неужели нету таких функций, и придется перезаписывать весь файл?
Можно либо считать все в память (если он не очень большой), дописать до места удаления. Пропустить. Писать дальше.
Либо использовать копию файла (если он вседке большой) - второй TFileStream. После чего удалить первый файл и переименовать временный.
Либо не удалять данные а поставить какую-нибудь пометку, что запись удалена (если файл содержит набор записей) - примерно так работают почти все базы данных. Достоинство - скорость "удаления". Недостатки - "замусоривание" файла.
Цитата:
Originally posted by MVal
Просто так удалить / вставить скорее всего не получится, т.к. это сдвиг.
Можно либо считать все в память (если он не очень большой), дописать до места удаления. Пропустить. Писать дальше.
Либо использовать копию файла (если он вседке большой) - второй TFileStream. После чего удалить первый файл и переименовать временный.
Либо не удалять данные а поставить какую-нибудь пометку, что запись удалена (если файл содержит набор записей) - примерно так работают почти все базы данных. Достоинство - скорость "удаления". Недостатки - "замусоривание" файла.
Просто так удалить / вставить скорее всего не получится, т.к. это сдвиг.
Можно либо считать все в память (если он не очень большой), дописать до места удаления. Пропустить. Писать дальше.
Либо использовать копию файла (если он вседке большой) - второй TFileStream. После чего удалить первый файл и переименовать временный.
Либо не удалять данные а поставить какую-нибудь пометку, что запись удалена (если файл содержит набор записей) - примерно так работают почти все базы данных. Достоинство - скорость "удаления". Недостатки - "замусоривание" файла.
Спасибо, MVal. Буду экспериментировать.