Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удалить директорию из архива, ZipFile(SharpZipLib) 
V
    Опции темы
amarenkov
Дата 15.5.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

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



Добрый день.

Для работы с zip-архивами пользую класс ZipFile из SharpZipLib. В этом классе есть метод добавления директории в архив (AddDirectory()), но нет функции удаления директории.

Кто-нибудь знает, как удалить из архива директорию?

Заранее спасибо smile.
PM MAIL ICQ   Вверх
alexsid1982
Дата 15.5.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кто-нить знает.

Надо распаковать архив в отдельный временный каталог
и создать новый, но уже без ненужной директории.

К сожалению SharpZipLib галимоватая весч и не позволяет
это сделать к-н другим способом.

PM MAIL   Вверх
amarenkov
Дата 15.5.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

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



alexsid1982 , не айс. Я с архивами работаю в памяти, и не хотелось бы менять этот принцип. Надо как-нибудь изголиться. Есть еще какие-нибудь идеи smile?
PM MAIL ICQ   Вверх
ptr
Дата 15.5.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

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



Цитата(amarenkov @  15.5.2008,  14:46 Найти цитируемый пост)
Для работы с zip-архивами пользую класс ZipFile из SharpZipLib. В этом классе есть метод добавления директории в архив (AddDirectory()), но нет функции удаления директории.

У ZipFile есть метод Delete, принимающий ZipEntry. Он удаляет не только файлы, но и директории.

Это сообщение отредактировал(а) ptr - 15.5.2008, 13:14


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
amarenkov
Дата 15.5.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

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



Да, но директория не есть ZipEntry smile. Ее нельзя получить функциями FindEntry...
PM MAIL ICQ   Вверх
ptr
Дата 15.5.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

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



Цитата(amarenkov @  15.5.2008,  17:00 Найти цитируемый пост)
Да, но директория не есть ZipEntry . Ее нельзя получить функциями FindEntry...

Кто тебе сказал? Её можно получить функцией GetEntry.

Цитата

ZipEntry. This class represents an entry in a zip archive. This can be a file or a directory.


Это сообщение отредактировал(а) ptr - 15.5.2008, 14:07


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
amarenkov
Дата 15.5.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

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



Цитата(ptr @  15.5.2008,  14:03 Найти цитируемый пост)
Кто тебе сказал


Собственно код и сказал smile)). Он мне возвращает null.

Например: zf.GetEntry("index.xml") - не null.
А zf.GetEntry("FOLDER") - null.
PM MAIL ICQ   Вверх
ptr
Дата 15.5.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

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



Ну дак у тебя файла FOLDER видно в архиве нет  smile 
Код

zf.GetEntry(@"FOLDER/");


Кстати могут возникнуть проблемы с удалением непустных директории. Раньше #ziplib не умел рекурсивно удалять директории, как сейчас не знаю.

Это сообщение отредактировал(а) ptr - 15.5.2008, 14:17


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
amarenkov
Дата 15.5.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

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



Цитата(ptr @  15.5.2008,  14:14 Найти цитируемый пост)
Ну дак у тебя файла FOLDE


Конечно, у меня нет файла "FOLDER". У меня есть папка "FOLDER". И он ее не может взять функцией GetEntry(). ptr , ты пробовал это все делать, или сейчас чисто теоретически рассказываешь?
PM MAIL ICQ   Вверх
ptr
Дата 15.5.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

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



Цитата(amarenkov @  15.5.2008,  17:27 Найти цитируемый пост)
ptr , ты пробовал это все делать, или сейчас чисто теоретически рассказываешь?

Пробовал smile 

"FOLDER" - файл
"FOLDER/" - директория

Слеш в конце видишь?

Добавлено через 6 минут и 6 секунд
Вот тебе код, удаляющий директорию directory из архива archive.zip.

Код

            ZipFile file = new ZipFile(@"archive.zip");
            ZipEntry entry=file.GetEntry(@"directory/");

            file.BeginUpdate();
            file.Delete(entry);
            file.CommitUpdate();
            file.Close();


Это сообщение отредактировал(а) ptr - 15.5.2008, 14:31


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
amarenkov
Дата 15.5.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

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



ptr , огромное спасибо smile)!

Никак не ожидал такого подвоха - пробовал с \ в начале, в конце... Но до / не додумался, а у тебя в посте не заметил. Спасибо smile).
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

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


 




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


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

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