Что нового

_7ZipExtractEx список извлекаемых файлов

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Из справки ...

Код:
#Include <7Zip.au3>
_7ZipExtractEx($hWnd, $sArcName[, $sOutput = 0[, $sHide = 0[, $sOverwrite = 0[, $sRecurse = 1[, _
        $sIncludeArc[, $sExcludeArc[, $sIncludeFile = 0[, $sExcludeFile = 0[, $sPassword = 0[, $sYes = 0]]]]]]]]]]) 

[TABLE]
[TR]
[TD]$sIncludeFile[/TD]
[TD][B][необязательный][/B] (-i) Включает имена извлекаемых файлов. Определяет имена файлов и подстановочные знаки (wildcard) или файл содержащий список извлекаемых файлов.[/TD]
[/TR]
[/TABLE]


Собственно вопрос как назначить список содержащий список :smile: извлекаемых файлов ?
Как только не пробовал и с разделителем "|" написать и через FileOpen(), массивом ... не работает
 

joiner

Модератор
Локальный модератор
Сообщения
3 372
Репутация
589
нужно перед извлечение вывести список извлекаемых файлов в массив? какова общая идея?
 
Автор
F

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Есть уже запакованный архив, мне нужно его распаковать, в зависимости от выбранных опций распаковать нужные файлы ... ну как делает инсталлятор.
 

joiner

Модератор
Локальный модератор
Сообщения
3 372
Репутация
589
могу предложить измененную udf
пример
Код:
#include <7ZipM.au3>
Local $include = 'file1.txt;file2.exe;file3.jpg'
Local $sArc = _ANSIToOEM(@ScriptDir & '\test.7z')
Local $sDestFolder = _ANSIToOEM(@ScriptDir & '\test')
_7ZipStartup()
_7ZIPExtractEx(0, $sArc, $sDestFolder, 0, 0, 0, 0, 0, $include)
 

Вложения

  • 288,2 КБ Просмотры: 5

joiner

Модератор
Локальный модератор
Сообщения
3 372
Репутация
589
ничего менять не нужно. я немного модифицировал библиотеку для своих нужд. плюсом учел проблемы с кирилицей. для других это может быть лишним или не критичным
 
Автор
F

FlatX007

Tattoo!
Сообщения
197
Репутация
35
не соглашусь, описание параметра в библиотеке не соответствует действительности, написано " файл содержащий список извлекаемых файлов " а где этот файл и как использовать ?

Набросал код для тестирования, ну и плюс оставлю тут может кому пригодится


содержание файлика FileList.txt
Код:
file3.jpg
dir1\file1_2.txt;dir1\file2_2.exe;dir1\file3_2.jpg
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <7ZipM.au3>

$FileList = @ScriptDir & '\FileList.txt'
Local $sArc = _ANSIToOEM(@ScriptDir & '\test.7z')
Local $sDestFolder = _ANSIToOEM(@ScriptDir & '\test')
Global $iTotal ; общее количество выбранных чекбоксов

$hFile = FileOpen($FileList, 0)

If $hFile = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть файл - " & $FileList)
    Exit
EndIf

$hGui = GUICreate("", 350, 124, -1, (@DesktopHeight / 2) - 250)
$Checkbox1 = GUICtrlCreateCheckbox("Извлекаем список в первой строчке файла FileList.txt", 8, 8, 300, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Извлекаем список во второй строчке файла FileList.txt", 8, 32, 300, 17)
$Label1 = GUICtrlCreateLabel("", 8, 88, 236, 25)
$Button1 = GUICtrlCreateButton("Извлечь", 270, 88, 75, 25)

_7ZipStartup()

GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            FileClose($hFile)
            Exit

        Case $Button1
            Local $iGcr1 = GUICtrlRead($Checkbox1) 
            Local $iGcr2 = GUICtrlRead($Checkbox2)
            Local $iPart = 0
            Local $iTotal = 0

            If $iGcr1 == $GUI_CHECKED Then $iTotal += 1 ; костыли конечно, зато просто и понятно =)
            If $iGcr2 == $GUI_CHECKED Then $iTotal += 1
            _InputSetData($Label1, $iPart, $iTotal)

            ; если чекбоксов много делаем через массив в цикле, но уже сложнее для понимания
            ; если FileReadLine($hFile, 1) возвращает пустую строку или файл который нет в архиве, извелечется весь архив
            If $iGcr1 == $GUI_CHECKED Then
                _7ZIPExtractEx(0, $sArc, $sDestFolder, 0, 0, 1, 0, 0, FileReadLine($hFile, 1), 0, "123456789")  ; пароль на архив 123456789
                If Not @error Then $iPart += 1
                _InputSetData($Label1, $iPart, $iTotal)
            EndIf

            If $iGcr2 == $GUI_CHECKED Then
                _7ZIPExtractEx(0, $sArc, $sDestFolder, 0, 0, 1, 0, 0, FileReadLine($hFile, 2), 0, "123456789")
                If Not @error Then $iPart += 1
                _InputSetData($Label1, $iPart, $iTotal)
            EndIf

    EndSwitch
WEnd

Func _InputSetData($Ctrl, $Part, $Total)

    GUICtrlSetData($Ctrl, "Извлечено частей:" & $Part & " Всего: " & $Total)

EndFunc   ;==>_InputSetData
 
Верх