Главная страница
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.034 c
3-1159301119
Olaf
2006-09-27 00:05
2006.11.26
Помогите составить SQL запрос и сведение его результатов.


15-1162574057
lookin
2006-11-03 20:14
2006.11.26
Индекс цитирования изданий по технологиям программирования


6-1152000505
Ildar
2006-07-04 12:08
2006.11.26
NetShareAdd используя 502 структуру


2-1163023174
V.I.P
2006-11-09 00:59
2006.11.26
сложение строк БД (ОЧЕНЬ СРОЧНО нужна помощь)


3-1158678700
*Ray*
2006-09-19 19:11
2006.11.26
авторизация пользователей