ynbIpb
Скриптер
- Сообщения
- 399
- Репутация
- 110
Помогите продумать алгоритм действий над необычным бинарным файлом, а точнее запись данных в него. Он содержит текстовые данные.
Структура файла такова:
Заголовок, размер, количество текстовых строк, и потом идут смещения этих строк по 4 байта и 4 байта ID строки, когда все смещения указаны начинаются текстовые строки одна за другой разделённые нулевым байтом (0x00, нультерминованная строка). _http://img829.imageshack.us/img829/2434/hexe.png
Так вот читать я эти строки умею, а вот Необходимо обратно записывать, учитывая, что строка может быть диннее чем была и соответственно все смещения последующих строк изменятся и их нужно пересчитывать и править в файле. Не представляю как проделать это с файлом если его полностью читать в память и работать как со строкой. По этому мне видится следующий алгоритм:
1. определяю оффсет заменяемой строки
2. Читаю бинарные данные, которые находяться после этой строки (не включая текущую строку) во временную переменную.
3. открываю файл для записи в бинарном виде и ставлю текущую позицию на этот офсет (FileSetPos )
4. пишу новую строку на выбранной позиции (при этом если строка длиннее она уже затирает последущие)
5. потом на той позиции, на которой остановился после записи новой строки пишу те данные, которые предварительно сохранил во временную переменную.
6. пересчитываю все оффсеты тех строк, которые шли после и поочерёдно правлю их выставляя позицию для записи (FileSetPos ) на те места, где эти оффсеты записаны.
Вот в общих чертах. Может кто предложит получше?
Структура файла такова:
Заголовок, размер, количество текстовых строк, и потом идут смещения этих строк по 4 байта и 4 байта ID строки, когда все смещения указаны начинаются текстовые строки одна за другой разделённые нулевым байтом (0x00, нультерминованная строка). _http://img829.imageshack.us/img829/2434/hexe.png
Так вот читать я эти строки умею, а вот Необходимо обратно записывать, учитывая, что строка может быть диннее чем была и соответственно все смещения последующих строк изменятся и их нужно пересчитывать и править в файле. Не представляю как проделать это с файлом если его полностью читать в память и работать как со строкой. По этому мне видится следующий алгоритм:
1. определяю оффсет заменяемой строки
2. Читаю бинарные данные, которые находяться после этой строки (не включая текущую строку) во временную переменную.
3. открываю файл для записи в бинарном виде и ставлю текущую позицию на этот офсет (FileSetPos )
4. пишу новую строку на выбранной позиции (при этом если строка длиннее она уже затирает последущие)
5. потом на той позиции, на которой остановился после записи новой строки пишу те данные, которые предварительно сохранил во временную переменную.
6. пересчитываю все оффсеты тех строк, которые шли после и поочерёдно правлю их выставляя позицию для записи (FileSetPos ) на те места, где эти оффсеты записаны.
Вот в общих чертах. Может кто предложит получше?