Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.05.29;
Скачать: [xml.tar.bz2];

Вниз

Указатель на последниий компонент потока   Найти похожие ветки 

 
Ghost del vonte ©   (2011-02-17 15:03) [0]

Здравствуйте! Тут такое дело, я хочу создать для своей программы что-то вроде архивов (в них будут хранится ресурсы (файлы)), в поток (TFileStream), будут записываться файлы, предварительно сжатые ZLib, синхронно с этим будет в дополнительный поток (TMemoryStream\TWriter) записываться информация об этих файлах (позиция, размер, имена, и имена папок (в которые будут помещены), после записи в поток всех файлов, информационный файл надо сохранить (также сжав его) в самый конец потока TFileStream), проблема в том, что я не могу поставить указатель (при открытии этого "архива" на самый последний файл (информационный), скажите, если в самом начале зарезервировать место для информации о позиции и размере сего файла

P^ := 0000000000;
MS.WriteBuffer(P^, buf, 9);

а потом в самом конце вернутся и внести эту информацию туда, указатели расположения всех файлов не поменяются?


 
Игорь Шевченко ©   (2011-02-17 15:27) [1]


> после записи в поток всех файлов, информационный файл надо
> сохранить (также сжав его) в самый конец потока TFileStream)


читать потом будет интересно


 
Slym ©   (2011-02-17 20:41) [2]

Ghost del vonte ©   (17.02.11 15:03)
расположения всех файлов не поменяются

нет...
зачем 9 байт? восьми байт Int64 вполне хватит :)


 
Slym ©   (2011-02-17 20:44) [3]

Игорь Шевченко ©   (17.02.11 15:27) [1]
вполне нормально:
заголовок фикс размера с указанием смещения на таблицу фс, далее файлы, и в конце таблица фс...

таблицу фс можно куда угодно вставить, информация о смещении в заголовке укажет правитьный путь


 
RWolf ©   (2011-02-17 23:42) [4]


> Ghost del vonte ©   (17.02.11 15:03) 

смещения блоков данных в потоке не поменяются, WriteBuffer после Seek в начало потока просто затирает ранее записанное.


 
Rouse_ ©   (2011-02-17 23:58) [5]


> Игорь Шевченко ©   (17.02.11 15:27) [1]
> читать потом будет интересно

ZIP вообще-то так и формируется, CentralDirectory у него в конце :)


 
Rouse_ ©   (2011-02-18 00:08) [6]

Да кстати, Ghost del vonte © - судя по описанию ты реально пытаешся воспроизвести формат ZIP файла. Рекомендую не заморачиваться а открыть его спецификацию и реализовать все по ней. Там и данные по элементам в виде LocalHeader с дополнительным финализирующим дескриптором и расширенные стримы дополняющие блок данных, и т.н. "информационный файл" с виде нескольких структур помещаемых как раз в конец файла. Их можно так-же сжимать и шифровать.


 
Ghost del vonte ©   (2011-02-18 00:14) [7]

Спасибо всем, эту проблему я решил! Но появилась другая: если файлов ооочень много, длина позиций увеличивается, и тип Integer не выдерживает, поэтому использую LongWord, все бы ничего но! TWriter не поддерживает этот тип, там нет такого: WR.WriteLongWord.....


 
clickmaker ©   (2011-02-18 00:22) [8]

> TWriter не поддерживает этот тип, там нет такого: WR.WriteLongWord

procedure WriteInteger(Value: Int64); overload;


 
sniknik ©   (2011-02-18 08:05) [9]

> и тип Integer не выдерживает
интежером можно адресоваться ровно до 2х гигобайт, 2 гигабайта это ровно столько сколько выдается 32-битной программе/максимальный размер строки/массива/т.д. всего что в памяти (не на диске), и после чего "данных нет"/пришли на край, а у тебя -
> синхронно с этим будет в дополнительный поток (TMemoryStream

подозреваю, что не "Integer не выдерживает@, а что то другое. т.е. проблема решена с проблемой...


 
Ghost del vonte ©   (2011-02-18 21:00) [10]


> sniknik ©   (18.02.11 08:05) [9]


Превышает числовой диапазон, типа, Байту нельзя же присвоить значение больше 255...

Скажите, а что означает эта ошибка? http://content.foto.mail.ru/mail/ghostdelvonte/173/s-425.png

Если в архив добавлено (тестирую его пока) более 7000 рисунков (примерно 700 с чем-то мегабайт), то после распаковки (после!!!) появляется ошибка, а эта ошибка (ссылка выше) появляется при закрытии программы, в обработчике закрытия написано LView1.Items.Clear; Не знаю где копать, если размер архива маленький (50 < мг) то все нормально....


 
Ghost del vonte ©   (2011-02-18 21:10) [11]


> в обработчике закрытия написано LView1.Items.Clear;


Забыл добавить, в листвьювере отображены все эти 7000 строк (имен файлов), и при очищении появляется именно эта ошибка...


 
sniknik ©   (2011-02-18 21:37) [12]

> Превышает числовой диапазон,
Range check error.

> http://content.foto.mail.ru/mail/ghostdelvonte/173/s-425.png
не верная операция над указателем

разные вещи вообще то.

> Не знаю где копать,
баги ищи. у себя в коде.


 
KilkennyCat ©   (2011-02-18 23:34) [13]


> Rouse_ ©   (17.02.11 23:58) [5]

> ZIP вообще-то так и формируется, CentralDirectory у него
> в конце :)

так автор ща похоже просто создаст очередной велосипед архиваторной породы.
по крайней  мере, я не увидел в теме ничего, что не делает winrar, например.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.05.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
15-1297716299
Mark
2011-02-14 23:44
2011.05.29
Слонение топонимов для украинского языка


2-1297950993
Неважно
2011-02-17 16:56
2011.05.29
BMP в массив и обратно


15-1295954003
Andy BitOff
2011-01-25 14:13
2011.05.29
Новый форум


2-1297928446
Andrey10
2011-02-17 10:40
2011.05.29
вопрос по бд


15-1297348833
delphi_developer
2011-02-10 17:40
2011.05.29
Программирование под iPhone





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский