Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.26;
Скачать: CL | DM;

Вниз

Вставка данных в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
15-1163062444
AVELINA
2006-11-09 11:54
2006.11.26
помогите инфой про wwExpandButton, plz...


11-1139397561
Igi
2006-02-08 14:19
2006.11.26
KOLHilightEdit в Delphi IDE


2-1162938878
Ref
2006-11-08 01:34
2006.11.26
Запрос в ADOQuery


2-1162953204
Grademax
2006-11-08 05:33
2006.11.26
Как правильно убить процесс?


15-1162911360
oldman
2006-11-07 17:56
2006.11.26
Ну вот не поздравляют меня с праздником...