Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с архивированием, Не все каталоги и папки сохраняет 
:(
    Опции темы
Snowy
Дата 18.4.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Нашёл.
3 глюки:
1. Из-за кэширования файла декомпрессором выход из цикла происходил раньше времени. Для больших файлов эта ошибка не возникает - только для мелких, которые легко глотаются кэшем декомпрессора.
2. Не все файлы имеют аттрибут Archive.
3. Файлы нулевой длины не создаются.
Также не создаются каталоги в которых нет файлов. Но это не было предусмотрено задачей.
Итак:
В компрессоре изменяем строку 
Код
        if (sr.Attr and faArchive) = faArchive then
на
Код
        if (sr.Attr and faDirectory) <> faDirectory then

Декомпрессор правим цикл:
Код
  else while (result=ERR_OK) do
  begin
    ln := 0; ds.Read(ln, SizeOf(ln));
    if ln = 0 then Break;
    SetLength(s, ln);
    ds.Read(s[1], ln);
    s := Path + s;
    memo1.Lines.Add('Распаковка: '+s);
    try
      ForceDirectories(ExtractFilePath(s));
      ts := TFileStream.Create(s, fmCreate or fmShareDenyWrite);
      ds.Read(sz, SizeOf(sz));
      if sz > 0 then ts.CopyFrom(ds, sz);
      ts.Free;
    except
      result := ERR_BAD_DATA;
    end;
  end;
 
PM MAIL   Вверх
Marlin
Дата 18.4.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 20.2.2006

Репутация: нет
Всего: 1



Snowy - ты просто супер!!!!

надеюсь я когда-нибудь дорасту до твоего уровня!!!

Добавлено @ 11:57 
Никогда бы не подумал про этот кэш!

Спасибо тебе большое.

И еще хочу спросить 

вот строка в комперессоре 
Код


 if sr.Name[1] <> '.' then begin



зачем нужна эта точка. Это ведь аттрибут "faHidden" т.е. скрытый файл, но все равно все файлы туда попадают - вот это мне не ясно 
--------------------
Программист решает проблемы, о которых пользователь даже не задумывается,способами, о котороых он даже не подозревает.
PM MAIL   Вверх
Snowy
Дата 18.4.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Просто при переборе FindFirst-FindNext в список попадают каталоги '.' и '..' - корень диска и каталог выше.
Мы же не хотим компресить весь диск smile Вот и отфильтровываем их.
 
PM MAIL   Вверх
Marlin
Дата 18.4.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 20.2.2006

Репутация: нет
Всего: 1



а это типа как в старые добрые времена в досе!! 
--------------------
Программист решает проблемы, о которых пользователь даже не задумывается,способами, о котороых он даже не подозревает.
PM MAIL   Вверх
Snowy
Дата 18.4.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ну так винда это и есть DOS. Только версия сильно подросла. 
PM MAIL   Вверх
Marlin
Дата 18.4.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 20.2.2006

Репутация: нет
Всего: 1



ну да впринципе ты прав

 
--------------------
Программист решает проблемы, о которых пользователь даже не задумывается,способами, о котороых он даже не подозревает.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1263 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.