Русское сообщество AutoIt

  • Май 20, 2012, 13:27:10 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:


Последняя финальная версия AutoIt: 3.3.8.1 (Скачать)
Последняя Beta версия AutoIt: 3.3.9.4 (Скачать)

Реклама

Автор Тема: Удаление файлов из архива *.zip  (Прочитано 1736 раз)

0 Пользователей и 2 Гостей смотрят эту тему.

Yashied [?]

  • Глобальный модератор
  • AutoIt MVP
  • *
  • *****
  • Репутация: 1905
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 3968
  • Версия AutoIt: 3+
    • Награды
Re: Удаление файлов из архива *.zip
« Ответ #15, Отправлен: Май 17, 2011, 16:07:20 »
Я не читал всю эту ветку, но по-моему, это проще сделать с помощью 7Zip.au3. Данный пример выводит информацию о содержимом всех .zip и .7z архивов в указанной папке и всех ее подпапках (обычная рекурсия). _FileListToArrayEx() - это просто улучшенный вариант _FileListToArray().

Код: AutoIt [Выделить]
#Include <7Zip.au3>
#Include <Date.au3>

_FindFiles(@DesktopDir & '\Test', '*.zip;*.7z')

Func _FindFiles($sRoot, $sFile, $sFilter = '*')

    Local $FL

    $FL = _FileListToArrayEx($sRoot, $sFile, 1)
    If Not @error Then
        For $i = 1 To $FL[0]
            _EnumArcFiles($sRoot & '\' & $FL[$i], $sFilter)
        Next
    EndIf
    $FL = _FileListToArrayEx($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FL[0]
            _FindFiles($sRoot & '\' & $FL[$i], $sFile)
        Next
    EndIf
EndFunc   ;==>_FindFiles

Func _EnumArcFiles($sPath, $sFilter)

    ConsoleWrite($sPath & @CR)
    ConsoleWrite('------------------------------------------------------------' & @CR)

    Local $hArc, $tInfo, $Result = 0

    Do
        $hArc = _7ZipOpenArchive(0, $sPath)
        If Not $hArc Then
            ExitLoop
        EndIf
        $tInfo = _7ZipFindFirst($hArc, $sFilter)
        If Not IsDllStruct($tInfo) Then
            ExitLoop
        EndIf
        Do
            $File = DllStructGetData($tInfo, 'szFileName')
            If StringRight($File, 1) <> '\' Then
                ConsoleWrite('File:   ' & $File & @CR)
                ConsoleWrite('Size:   ' & DllStructGetData($tInfo, 'dwOriginalSize') & @CR)
                ConsoleWrite('Date:   ' & _Date_Time_DOSDateToStr(DllStructGetData($tInfo, 'wDate')) & @CR)
                ConsoleWrite('Time:   ' & _Date_Time_DOSTimeToStr(DllStructGetData($tInfo, 'wTime')) & @CR)
                ConsoleWrite('Attrib: ' & DllStructGetData($tInfo, 'szAttribute') & @CR)
                ConsoleWrite(@CR)
            EndIf
            $tInfo = _7ZipFindNext($hArc, $tInfo)
        Until Not IsDllStruct($tInfo)
        $Result = 1
    Until 1
    If Not $Result Then
        ConsoleWrite('Error!' & @CR)
    Else
        ConsoleWrite(@CR)
    EndIf
    Return $Result
EndFunc   ;==>_EnumArcFiles

Func _FileListToArrayEx($sPath, $sFilter = "*", $iFlag = 0)
    Local $hSearch, $aResult, $sFile, $sFileList, $sDelim = "|"
    $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\"
    If Not FileExists($sPath) Then Return SetError(1, 1, "")
    If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
    If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
    $hSearch = FileFindFirstFile($sPath & '*')
    If @error Then Return SetError(4, 4, "")
    While 1
        $sFile = FileFindNextFile($hSearch)
        If @error Then ExitLoop
        If ($iFlag + @extended = 2) Then ContinueLoop
        $aResult = DllCall('shlwapi.dll', 'int', 'PathMatchSpecW', 'wstr', $sFile, 'wstr', $sFilter)
        If (Not @error) And ($aResult[0]) Then $sFileList &= $sDelim & $sFile
    WEnd
    FileClose($hSearch)
    If Not $sFileList Then Return SetError(4, 4, "")
    Return StringSplit(StringTrimLeft($sFileList, 1), "|")
EndFunc   ;==>_FileListToArrayEx

EnumArchive.zip

P.S

Удалить файл из архива можно с помощью функции _7ZipDelete() из того же 7Zip.au3.
« Последнее редактирование: Май 17, 2011, 16:23:11 от Yashied »



  Записан
Думай, прежде чем говорить.

RUVATA [?]

  • Осваивающий
  • **

  • Автор темы
  • Репутация: 30
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 125
  • Версия AutoIt: v 3.3.6.1
  • лучше один раз увидеть, чем десять раз услышать...
    • Награды
Re: Удаление файлов из архива *.zip
« Ответ #16, Отправлен: Май 17, 2011, 16:26:58 »
Yashied
Будет время обязательно попробую... но я решил справиться сам...
при помощи своей наработки я получил структуру в супермассив (все завязано на рекурсию это само сабой :) )
А далее дело техники -
Цитата
7za.exe d test.zip -r -x!*.1CD при таких параметракто молниеносно быстро рекурсивно удаляются все файлы кроме *.1СD... причем -x! можно задавать сколь угодно много...





  Записан
Полезный совет? - жми "Полезное сообщение" :) не стесняйся...
И автору приятно, и для соискателей толк.

Yashied [?]

  • Глобальный модератор
  • AutoIt MVP
  • *
  • *****
  • Репутация: 1905
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 3968
  • Версия AutoIt: 3+
    • Награды
Re: Удаление файлов из архива *.zip
« Ответ #17, Отправлен: Май 17, 2011, 16:43:00 »
"Супермассивы" - это запутанный код + сложное использование + ограничение + нежелательное использование мссива в массиве.




  Записан

RUVATA [?]

  • Осваивающий
  • **

  • Автор темы
  • Репутация: 30
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 125
  • Версия AutoIt: v 3.3.6.1
  • лучше один раз увидеть, чем десять раз услышать...
    • Награды
Re: Удаление файлов из архива *.zip
« Ответ #18, Отправлен: Май 17, 2011, 17:08:30 »
Yashied  [?]

Цитата
"Супермассивы" - это запутанный код + сложное использование + ограничение +
Код не слишком запутанный, на мой взгляд... если например сравнить с приведенным вами  кодом _FileListToArray()
Разобраться можно, пусть не с ходу как книгу но можно... причем я позаимствовал конструкцию из C++, мой супермассив не что иное как колекция, просто AutoIt добавляет шарма, т.к. не объектноориентированый  :IL_AutoIt_1:

Цитата
нежелательное использование массива в массиве.
- это верно... в данном случае это факт, но иначе не выходит - динамическая типизация, невозможность определять классы и т.д.

А вот насчет ограничений и сложного использования - можно по подробнее ?





  Записан

Yashied [?]

  • Глобальный модератор
  • AutoIt MVP
  • *
  • *****
  • Репутация: 1905
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 3968
  • Версия AutoIt: 3+
    • Награды
Re: Удаление файлов из архива *.zip
« Ответ #19, Отправлен: Май 17, 2011, 17:33:49 »
Код: AutoIt [Выделить]
$Demonstration = Struct_Reader('C:\')

C:\Users\Jack\Desktop\New folder\New AutoIt v3 Script.au3 (71) : ==> Variable used without being declared.:
_ArrayDisplay($Result, "Result")
_ArrayDisplay(^ ERROR




  Записан

RUVATA [?]

  • Осваивающий
  • **

  • Автор темы
  • Репутация: 30
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 125
  • Версия AutoIt: v 3.3.6.1
  • лучше один раз увидеть, чем десять раз услышать...
    • Награды
Re: Удаление файлов из архива *.zip
« Ответ #20, Отправлен: Май 18, 2011, 09:21:38 »




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
[Файловая система] Копирование,переименовывание и удаление файлов
Стол заказов
asperin 2 1311 Последний ответ Апрель 17, 2010, 21:13:18
от asperin
Работа с файлами и удаление их.И склейка 2х файлов.
AutoIt для новичков
Arei 5 962 Последний ответ Октябрь 05, 2010, 16:22:15
от Arei
Удаление файлов не имеющих расширения
AutoIt для новичков
prokazzza 1 763 Последний ответ Февраль 01, 2011, 19:36:12
от CreatoR
Извлечение файлов из архива
AutoIt для новичков
pan1982 2 893 Последний ответ Март 10, 2011, 09:20:23
от pan1982
Поиск и удаление файлов
AutoIt для новичков
prokazzza 9 919 Последний ответ Апрель 07, 2011, 08:22:14
от prokazzza
Поиск файлов на диске и удаление определеного
AutoIt для новичков
ArtDevil 2 625 Последний ответ Апрель 26, 2011, 10:14:02
от madmasles
[Файловая система] Удаление файлов с использованием переменные окружения.
AutoIt для новичков
millifolium 2 393 Последний ответ Декабрь 16, 2011, 12:47:23
от madmasles
[Файловая система] Удаление файлов с usb накопителя.
Стол заказов
Gorenich 5 554 Последний ответ Январь 11, 2012, 12:41:35
от Gorenich
[Элементы GUI] Как на кнопку повесить несколько действий (удаление процесса и удаление файла)
AutoIt для новичков
Matisse 13 305 Последний ответ Март 25, 2012, 20:53:34
от Matisse
Удаление файлов и папок из списка.
Стол заказов
Fergus 2 219 Последний ответ Апрель 08, 2012, 22:34:38
от Fergus


Реклама

* Последние сообщения на форуме
post Re: Проблема с циклами While
[AutoIt для новичков] Andeangl Сегодня в 13:15:19
post Re: Уроки программирования и автоматизации посредством AutoIt для чайников
[Инструменты и помощь по AutoIt] ynbIpb Сегодня в 13:15:02
post Re: [Мышь, клавиатура] Привязка клика по координатам к клавише
[Стол заказов] megatoxx Сегодня в 12:41:37
post Re: Проблема с циклами While
[AutoIt для новичков] Yashied Сегодня в 12:14:25
post Сглаживание рывков при передачи новых координат игрока по TCP/IP
[Общение] Ganibal95 Сегодня в 12:10:37
post Перенесено: Уроки программирования и автоматизации посредством AutoIt для чайников
[AutoIt для новичков] Yashied Сегодня в 12:09:28
post Re: Защита исходного кода программы
[AutoIt для новичков] iamOmg Сегодня в 12:09:05
post Проблема с циклами While
[AutoIt для новичков] Andeangl Сегодня в 11:03:15
post Уроки программирования и автоматизации посредством AutoIt для чайников
[Инструменты и помощь по AutoIt] aak Сегодня в 09:41:45
post Re: Как спарсить ссылку внутри тега "td" определенного класса
[Регулярные выражения и прочее] eropov Сегодня в 05:27:00

* Пользователи онлайн
  • Dot Гостей: 110
  • Dot Скрыт: 2
  • Dot Пользователей: 31
  • Dot Пользователи Online: