В общем задача просто-таки элементарная (для других ЯП), но вот с пыхом это просто гемор. Нужно удалить первые n байт из файла. Тобишь, есть файл text.txt, с него удалить надо допустим первые 10 байт (первую строку), не читая весь файл и тем-более не перезаписывая его. Варианты типу: "Прочесть весь => Обрезать в переменной => Сохранить" не катят Файл будет ~10гиг, прочесть его кусками - проблем нет, через fgets, и дописать в конец не трогая всего - тоже нет проблем, а удалить как? Вещь очень нужная, так-что надо думать даже в сторону других ЯП с которыми можно будет сообразить что-то через exec...
Mixon Пример кода, пожалуйста. Файловые системы - не умеют удалять часть файла из начала. Для такой операции в любом случае придется переписывать файл. Однако читать целиком файл в переменную - действительно не имеет смысла. Достаточно дважды открыть файл на чтение и запись и читать-писать поблочно.
Файловые системы - не умеют удалять часть файла из начала. Gifts, Файловые системы караз могут сделать либо-что с файлом, в плоть до создать файл в котором будет каждый второй байт жёсткого диска содержать Можно даже удалить средину файла не зацепая остального, и мало того - даже не удаляя самых данных Фрагментация - самый простой пример этому. Сам код не смотрел (хотя в поиске много вопросов вида "удалить первые n байт"), но я уверен что варианты в более серьёзных языках есть, типу сдвига байтов. В самом крайнем случае - можно сделать на прямую работу с жёстким диском, в плоть до сдвига лимитов файла в таблице файлов (если нет фрагментации файла то там указан начальный и конечный физический адрес файла, если сдвинуть этот адрес на 10 байт дальше то сам файл станет меньше, а его байты "сдвинутые" станут просто незанятым местом, которое затрётся при копировании или дефрагментировании позже) Щас открывать билдер и писать такой код для редакта FAT сетки для примера вам не буду, ибо идею я рассказал. по факту запись в конец через fwrite добавляет в конец данные и потом сдвигает задний лимит файла. А мне начальный-бы сдвинуть и было-бы хорошо. п.с. это первый вариант решения что пришёл в голову, если сесть подумать то я уверен - найдётся еще десяток-два нормальных, но наврядли один с них потянет php... Кстати интерестные алгоритмы думаю у БД MySQL, ибо она удаляет за сотые доли запись с БД своей, которая на жёстком диске, соответсвенно не трогая остальные байты, ибо еслиб она за каждым удалением это делала то базы по 1 000 гиг чуток дольше сохранялись
Ага, будешь под каждую файловую систему писать такой код? Под вин7 тебе ещё права администратора понадобятся небось, а кто же гоняет сервер под админом... Ну так перегони данные из файла в базу и проводи манипуляции. Факт в том, что, например, для набора бинарных данных зашифрованных размером 8 гб ты такую модель не реализуешь.
1. Я данный пример привёл место "код в студию на другом ЯП", попросили - я привёл, мне он и не подходит ибо мне надо на php решение а не такое как в таком примере, я лишь показал что это реально. 2. В базу нет смысла переганять ибо эти данные будут постоянно обновлятся, а переганять их в БД очень не удобно 3. О зашифрованных данных речь и не шла, я не ставил на жёсткий шифрования.
Проще простого, читаем первую и вторую строку, сбрасываем указатель на начало файла (на две строки назад), затем пишем вторую строку, сдвигаем указатель снова назад на две строки и т.д. в цикле так. Прочитать в итоге придётся весь файл и перезаписать его полностью.
Хм, уже по лучше вариант чем "невозможно", инетерстный, но получается в начале будет норм а потом с арифметической прогрессией будет больше и больше тупить, а это not good В общем я понял, человеческого решения не найти. Переписал софт, теперь вся БД генерится в режиме он-лайн, а не берётся готовая. Всем пасиб
-=lebed=- я написал то же самое, только чувствую два дескриптора быстрее чем fseek Mixon Феерическое непонимание способов организации и адресации данных в файловых системах. Почитайте на досуге что такое кластеры и секторы, например.