Как программно узнать закончил ли ZIP свою работу ? - VB

Узнай цену своей работы

Формулировка задачи:

Тот класс переделал, только не могу понять как всётаки получить ответ что ZIP закончил свою работу ? класс переделал ! по рекомендации проффесионала под ником

Dragokas

выкладываю все версии в блоге ниже фрагмент с коментарием где необходим этот код
Листинг программы
  1. Public Function UnZipFile(ByVal DestPath$, ParamArray Files())
  2. '
  3. 'Извлечение из архива
  4. 'Аргументы:
  5. 'DestPath - полный путь к папке для распаковки архива
  6. 'Files - Без параметра все файлы, либо по индексу либо имени в архиве
  7. 'Примечание: Имена файлов в архиве, должны быть полными !
  8. '
  9. Dim DestDir As Object, s$, f&, j$(), v As Variant
  10. If Not FolderExists(DestPath) Then 'Проверяем есть ли папка
  11. MkDir (DestPath) 'Создаём папку для перемещаемых туда объектов
  12. End If
  13. Set DestDir = Shell.NameSpace((DestPath))
  14. If IsMissing(Files) Then
  15. DestDir.CopyHere mArchive.Items 'Перемещаем все ...
  16. '
  17. '
  18. '===== Здесь нужен правильный код окончания операции ! ! !
  19. '
  20. '
  21. Else
  22. For Each v In Files 'Подготавливаем список для перемещения
  23. If IsNumeric(v) Then
  24. s = s & " " & mArchive.Items().Item((v)).Name
  25. Else
  26. For f = 0 To mArchive.Items.Count - 1
  27. If v = mArchive.Items().Item((f)).Name Then s = s & " " & f
  28. Next
  29. End If
  30. Next
  31. j = Split(Mid$(s, 2)) 'Cписок для перемещения
  32. For f = 0 To mArchive.Items.Count - 1
  33. s = mArchive.Items().Item(CLng(j(f))).Name
  34. s = DestPath & "\" & s
  35. DestDir.CopyHere mArchive.Items.Item(CLng(j(f))) 'Перемещаем указнные инексы
  36. Do 'Ждём пока в папке назначения не появится файл
  37. Sleep 100 '1/10 доля секунды
  38. Loop While Len(Dir(s)) = 0
  39. Next
  40. End If
  41. End Function

Решение задачи: «Как программно узнать закончил ли ZIP свою работу ?»

textual
Листинг программы
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Private Declare Function GetActiveWindow Lib "user32" () As Long
  3.  
  4. Private Function CopyHere(Parent As Object, vItem, Optional vOptions) As Boolean
  5.     '
  6.    'Функция копирования
  7.    'Аргументы: Папка (Zip-папка) // Копируемый объект
  8.    '
  9.    'Флаги опций
  10.    '4 - Не показывать окно с прогресс-баром.
  11.    '8 - Дать копируемому файлу новое имя, если файл с таким именем уже существует.
  12.    '16 - Отвечать автоматически "Yes to All" в любом отображаемом диалоге.
  13.    '256 - Отображать окно с прогресс-баром, но не показывать имена файлов.
  14.    '4096 - Производить операции только в локальной папке. Не производить операции рекурсивно в подпапках.
  15.    '9182 - Не копировать связанные файлы (например, html-файлы с их папками) как группу. Копировать только указанные файлы.
  16.    '
  17.    Dim oPr As Object, Name$, ModifyDate As Date
  18.     Dim OldDate As Date, n&, h&
  19.  
  20.     OldDate = Shell.NameSpace(Parent.Self.Path).Self.ModifyDate
  21.     Parent.CopyHere (vItem), vOptions
  22.     On Error Resume Next
  23.     If vItem.Count > 0 Then If Err.Number = 0 Then GoTo 1
  24.     Do
  25.         h = GetActiveWindow
  26.         DoEvents
  27.         Sleep 100
  28.         n = n + Abs(h <> GetActiveWindow)
  29.         ModifyDate = Shell.NameSpace(Parent.Self.Path).Self.ModifyDate
  30.         Debug.Print ModifyDate, n
  31.         If OldDate <> ModifyDate Or n > 1 Then Exit Do
  32.     Loop
  33. 1
  34.     CopyHere = True
  35. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы