Форум: "Основная";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
ВнизВставка данных в TFileStream Найти похожие ветки
← →
Gosha11 (2006-10-13 09:25) [0]Здравствуйте уважаемые.
Если возможность как-нибудь вставить данные в TFileStream не затирая имеющиеся? Я нашел только возможность записывать в него поверх тех данных, что в нем уже есть, с помощью Write, WriteBuffer. А вот вставка со сдвигом данных этого нет. Есть ли какие-нибудь пути решения такой проблемы? Файлы у меня огромные и их в память совсем не хочется грузить, но данные надо вставлять не в конец, а в разные части файлов.
← →
Zeqfreed © (2006-10-13 09:30) [1]Создаешь 2 файлстрима, копируешь до места вставки, копируешь то, что надо вставить, копируешь то, что ещё не скопировал. При желании повторить.
← →
Slym © (2006-10-13 09:50) [2]Можно, Структура файла:
PTEP:Int64 - PiecesTableEntryPoint
Data - Данные;
в конце файла -
PT:array of TPiece; - PiecesTable
TPiece=record
EntryPoint:Int64;
Length:integer;
end;
для вставки: находишь кусок в который надо вставить, разбиваешь его на 2 по месту вставки и между ними создаешь еще один кусок (TPiece), данные дописываешь в конец Data
Иногда нуна делать дефрагментацию файла иначе PiecesTable распухнет
← →
Slym © (2006-10-13 09:52) [3]PiecesTable полностью читаем в память
новые данные пишем по смещению PTEP и при закрытии файла сохранять в конец PiecesTable
← →
Zeqfreed © (2006-10-13 09:55) [4]> [2] Slym © (13.10.06 09:50)
А если надо вставить что-то в середину текстового файла? Или файла определенного формата? Зачем такие ужасные извращения.
← →
Slym © (2006-10-13 09:58) [5]чтение:
read(buf,offset,count)
1. суммируем длинны (Length) частей с первой до достижения offset
т.е. определяем в какой части находится искомая инфа.
2. вычисляем смещение в файле согласно проссумированным длиннам, offset и EntryPoint части
3. читаем, если достигли конца части берем следующую часть и продолжаем читать
← →
Slym © (2006-10-13 09:59) [6]Zeqfreed © (13.10.06 9:55) [4]
текстового файла
а ты про текстовый файл до этого ничего не говорил :)
← →
Slym © (2006-10-13 10:01) [7]Zeqfreed © (13.10.06 9:55) [4]
ужасные извращения
это примитивный FAT а не извращения, или даже NTFS (FAT фиксированного размера)
← →
Zeqfreed © (2006-10-13 10:02) [8]> [6] Slym © (13.10.06 09:59)
Я вообще ни про какие не говорил. Но уверен, что автору не нужен собственный извращенный способ хранения файлов.
← →
Slym © (2006-10-13 10:04) [9]Zeqfreed © (13.10.06 10:02) [8]
извращенный способ хранения файлов
формат файла со случайным доступом к месту дозаписи
← →
Zeqfreed © (2006-10-13 10:08) [10]> [9] Slym © (13.10.06 10:04)
Да это все понятно. Только смысла, мне кажется, в таком файле не много.
← →
Slym © (2006-10-13 10:28) [11]Zeqfreed © (13.10.06 10:08) [10]
Только смысла в таком файле не много
В файле не смысл, а данные :)
попробуй дописать в середину 1Gb файла 100Mb информации твоим [1] методом при условии что свободного места 500Mb :)
← →
Slym © (2006-10-13 10:32) [12]а уж потом можно добавить условие: при дозаписи N байт объем записываемых на диск данных не должен привышать N+M байт где M объем спец данных (формата данных) размером которого при больших N можно принебречь
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c