Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2018, 11:50   #1
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию VBA Распаковщик архивов

Доброго времени суток
Есть процедура, извлекающая файлы из архивов в подкаталогах
Код:
Public Sub UnRAR()
Dim winRarApp As String, archName As String
Dim fso, fold, subfold, file
Dim RetVal
    If Me.Поле0 <> 0 Then
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fold = fso.GetFolder(Me.Поле0)
        For Each subfold In fold.Subfolders
            For Each file In subfold.Files
                If file.Name Like "*rar" Or file.Name Like "*zip" Or file.Name Like "*7z" Then
                winRarApp = sWinRarAppPath & " E -o+"
                archName = subfold.Path & "\" & file.Name
                RetVal = Shell(winRarApp & " """ & archName & """ """ & subfold.Path & """ ", vbHide)
                End If
            Next
        Next
    Set fso = Nothing
    Else
    MsgBox "Каталог не выбран"
    End If
End Sub
Как я понял, строка
Код:
RetVal = Shell(winRarApp & " """ & archName & """ """ & subfold.Path & """ ", vbHide)
запускает процесс извлечения, после чего цикл идёт дальше, не дожидаясь пока файлы не будут извлечены. Когда я тестировал на каталоге, где было около 30 папок, вышло так, что процедура завершилась, оставив меня наблюдать порядка тридцати процессов извлечения файлов

А существует ли возможность как-нибудь приостановить выполнение цикла на время, нужное для извлечения файла(ов) и затем запустить его заново?
Ethex вне форума Ответить с цитированием
Старый 20.08.2018, 11:53   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

http://www.cpearson.com/excel/ShellAndWait.aspx
p51x вне форума Ответить с цитированием
Старый 20.08.2018, 16:33   #3
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
http://www.cpearson.com/excel/ShellAndWait.aspx
Скопировал функцию. При компиляции выдаёт Method or data member not found в строке
Код:
SaveCancelKey = Application.EnableCancelKey
Ethex вне форума Ответить с цитированием
Старый 20.08.2018, 16:39   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну напишите свою простую обертку. Там всего лишь не забыть сохранить пид и подождать в WaitForSingleObject
p51x вне форума Ответить с цитированием
Старый 22.08.2018, 16:22   #5
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну напишите свою простую обертку
Код:
Public Function wait(winRarApp As String, archName As String, subfoldPath As String)
Dim pID As Long, pHandle As Long, WaitProcess As Long
pID = Shell(winRarApp & " """ & archName & """ """ & subfoldPath & """ ", vbHide)
pHandle = OpenProcess(&H100000, True, pID)
WaitProcess = WaitForSingleObject(pHandle, INFINITE)
End Function
Собственно, копировать всю функцию пытался оттого что увидел много незнакомых слов и кода. Пришлось покумекать. Не буду врать что удалось полностью разобраться - это ещё предстоит. Но получилось то что выше. И оно работает. Спасибо за подробную наводку
Ethex вне форума Ответить с цитированием
Старый 22.08.2018, 16:29   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Только не забывает закрывать хендл с помощью CloseHandle.
p51x вне форума Ответить с цитированием
Старый 23.08.2018, 12:30   #7
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Только не забывает закрывать хендл с помощью CloseHandle.
Агась, учтено
Ethex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распаковщик на Delphi SDK Общие вопросы Delphi 19 02.05.2014 23:04
Распаковщик файла .sf darkdoren Общие вопросы C/C++ 4 03.08.2013 13:25
Хочу написать распаковщик формата Anton911 Общие вопросы Delphi 4 05.05.2012 10:43
bash-распаковщик архивов SNake Ice Помощь студентам 0 02.04.2011 04:31
Нужен распаковщик .ехе файлов Veselyn Софт 3 03.05.2009 06:24