Автор Тема: _Zip.au3 Подтверждение замены папки  (Прочитано 160 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн gergerger111 [?]

  • Новичок
  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
По умолчанию не работают следующие флаги:
флаг 1 - Перезаписать файл в папке назначения, если он существует
флаг 8 - Переименовывает, если файл с таким именем уже существует

Добавление флагов в ручную, предоставление прав администратора = не помогло.

Код: AutoIt [Выделить]
#include <_Zip.au3>

$sZipFile = FileOpenDialog("Выберите архив", "", "Архивы ZIP (*.zip)", 3)
If @error Then Exit

$sFolder = "D:\t1"
$sFolder2 = "D:\t2"
$iRes = _Zip_Unzip ($sZipFile, "t1", "D:\222_t1") ;по умолчанию не работают сделующие флаги:
                                                  ;флаг 1 - Перезаписать файл в папке назначения, если он существует
                                                  ;флаг 8 - Переименовывает, если файл с таким именем уже существует
If @error Then
    MsgBox(64, "_Zip_UnzipAll", "Ошибка @error = " & @error)
Else
    MsgBox(64, "_Zip_UnzipAll", "Успех: " & $iRes)
EndIf
 


Ответ на форуме не нашёл( Плохо искал ?

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

_Zip.au3 Подтверждение замены папки
« Отправлен: Май 18, 2018, 09:46:01 »

Оффлайн hedji [?]

  • Осваивающий
  • **
  • Сообщений: 266
  • Репутация: 41
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _Zip.au3 Подтверждение замены папки
« Ответ #1, Отправлен: Май 18, 2018, 10:04:44 »
Я может другую версию _Zip.au3 скачал, но в моей версии у функции _Zip_Unzip() флага 8 нет, а флаг 1 - не показывать прогресс.

Код: AutoIt [Выделить]
;===============================================================================
;
; Function Name:    _Zip_Unzip()
; Description:      Extract a single file contained in a ZIP Archieve.
; Parameter(s):     $hZipFile - Complete path to zip file that will be created (or handle if existant)
;                   $hFilename - Name of the element in the zip archive ex. "hello_world.txt"
;                   $hDestPath - Complete path to where the files will be extracted
;                   $flag = 1
;                   - 1 no progress box
;                   - 0 progress box
; Requirement(s):   none.
; Return Value(s):  On Success - 0
;                   On Failure - sets @error 1~3
;                   @error = 1 no Zip file
;                   @error = 2 no dll
;                   @error = 3 dll isn't registered
; Author(s):        torels_
; Notes:            The return values will be given once the extracting process is ultimated... it takes some time with big files
;
;===============================================================================
Func _Zip_Unzip($hZipFile, $hFilename, $hDestPath, $flag = 1)
    Local $DLLChk = _Zip_DllChk()
    If $DLLChk <> 0 Then Return SetError($DLLChk, 0, 0) ;no dll
    If not _IsFullPath($hZipFile) then Return SetError(4,0) ;zip file isn't a full path
    If Not FileExists($hZipFile) Then Return SetError(1, 0, 0) ;no zip file
    If Not FileExists($hDestPath) Then DirCreate($hDestPath)
    $oApp = ObjCreate("Shell.Application")
    $hFolderitem = $oApp.NameSpace($hZipFile).Parsename($hFilename)
    $oApp.NameSpace($hDestPath).Copyhere($hFolderitem)
    While 1
        If $flag = 1 then _Hide()
        If FileExists($hDestPath & "\" & $hFilename) Then
            return SetError(0, 0, 1)
            ExitLoop
        EndIf
        Sleep(500)
    WEnd
EndFunc   ;==>_Zip_Unzip
 


Оффлайн gergerger111 [?]

  • Новичок
  • *
  • Сообщений: 15

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _Zip.au3 Подтверждение замены папки
« Ответ #2, Отправлен: Май 18, 2018, 10:34:05 »
Я может другую версию _Zip.au3 скачал, но в моей версии у функции _Zip_Unzip() флага 8 нет, а флаг 1 - не показывать прогресс.

Код: AutoIt [Выделить]
;===============================================================================
;
; Function Name:    _Zip_Unzip()
; Description:      Extract a single file contained in a ZIP Archieve.
; Parameter(s):     $hZipFile - Complete path to zip file that will be created (or handle if existant)
;                   $hFilename - Name of the element in the zip archive ex. "hello_world.txt"
;                   $hDestPath - Complete path to where the files will be extracted
;                   $flag = 1
;                   - 1 no progress box
;                   - 0 progress box
; Requirement(s):   none.
; Return Value(s):  On Success - 0
;                   On Failure - sets @error 1~3
;                   @error = 1 no Zip file
;                   @error = 2 no dll
;                   @error = 3 dll isn't registered
; Author(s):        torels_
; Notes:            The return values will be given once the extracting process is ultimated... it takes some time with big files
;
;===============================================================================
Func _Zip_Unzip($hZipFile, $hFilename, $hDestPath, $flag = 1)
    Local $DLLChk = _Zip_DllChk()
    If $DLLChk <> 0 Then Return SetError($DLLChk, 0, 0) ;no dll
    If not _IsFullPath($hZipFile) then Return SetError(4,0) ;zip file isn't a full path
    If Not FileExists($hZipFile) Then Return SetError(1, 0, 0) ;no zip file
    If Not FileExists($hDestPath) Then DirCreate($hDestPath)
    $oApp = ObjCreate("Shell.Application")
    $hFolderitem = $oApp.NameSpace($hZipFile).Parsename($hFilename)
    $oApp.NameSpace($hDestPath).Copyhere($hFolderitem)
    While 1
        If $flag = 1 then _Hide()
        If FileExists($hDestPath & "\" & $hFilename) Then
            return SetError(0, 0, 1)
            ExitLoop
        EndIf
        Sleep(500)
    WEnd
EndFunc   ;==>_Zip_Unzip
 


Может тогда есть идеи ? как избавиться от этой проблемы ?
"Подтверждение замены папки"

Оффлайн hedji [?]

  • Осваивающий
  • **
  • Сообщений: 266
  • Репутация: 41
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _Zip.au3 Подтверждение замены папки
« Ответ #3, Отправлен: Май 18, 2018, 10:51:31 »
Предварительно удалить папку или файлы через
Код: AutoIt [Выделить]
потом разархивировать

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

Re: _Zip.au3 Подтверждение замены папки
« Ответ #3 Отправлен: Май 18, 2018, 10:51:31 »

Оффлайн gergerger111 [?]

  • Новичок
  • *
  • Сообщений: 15

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _Zip.au3 Подтверждение замены папки
« Ответ #4, Отправлен: Май 18, 2018, 11:10:10 »
Предварительно удалить папку или файлы через
Код: AutoIt [Выделить]
потом разархивировать

Жёсткие костыли учитывая, что я не донёс до вашего сведения еще 1 условие.
Внутри целевой папки в которую мы копируем файлы лежат файлы которые нельзя удалять (можно перезаписать).
И разархивироваться будут новые тхт файлы (повторяющиеся будут перезаписываться, с выводом сообщения да/нет)

Оффлайн hedji [?]

  • Осваивающий
  • **
  • Сообщений: 266
  • Репутация: 41
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _Zip.au3 Подтверждение замены папки
« Ответ #5, Отправлен: Май 18, 2018, 11:21:02 »
Варианты костылей, учитывая условие 1:
1) Разархивировать во временную папку, затем переносить через DirMove или FileMove, они как раз с опцией перезаписи
2) Ломать в самой функции _Zip_Unzip конструкцию
Код: AutoIt [Выделить]
If FileExists($hDestPath & "\" & $hFilename) Then
            return SetError(0, 0, 1)
            ExitLoop
EndIf
 

чтобы была возможность перезаписи

Онлайн gunter123 [?]

  • Осваивающий
  • **
  • Сообщений: 97
  • Репутация: 39
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _Zip.au3 Подтверждение замены папки
« Ответ #6, Отправлен: Май 18, 2018, 11:29:41 »
Надо изменить строчку в функции _Zip_Unzip:
Код: AutoIt [Выделить]
$oApp.NameSpace($hDestPath).Copyhere($hFolderitem, 16)

https://msdn.microsoft.com/en-us/library/windows/desktop/bb787866(v=vs.85).aspx
Is it future or is it past?

Оффлайн gergerger111 [?]

  • Новичок
  • *
  • Сообщений: 15

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _Zip.au3 Подтверждение замены папки
« Ответ #7, Отправлен: Май 18, 2018, 11:48:19 »
Надо изменить строчку в функции _Zip_Unzip:
Код: AutoIt [Выделить]
$oApp.NameSpace($hDestPath).Copyhere($hFolderitem, 16)

https://msdn.microsoft.com/en-us/library/windows/desktop/bb787866(v=vs.85).aspx [nofollow]

Вы про эти строки ? (вроде заменил строку на вашу , не помогло)
Код: AutoIt [Выделить]
    $oApp = ObjCreate("Shell.Application")
    $oApp.Namespace($hDestPath).CopyHere($oApp.Namespace($hZipFile).Items)
    For $item In $oApp.Namespace($hZipFile).Items


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

Re: _Zip.au3 Подтверждение замены папки
« Ответ #7 Отправлен: Май 18, 2018, 11:48:19 »

Помечен как лучший ответ пользователем gergerger111 Отправлен Май 18, 2018, 14:06:50

Онлайн gunter123 [?]

  • Осваивающий
  • **
  • Сообщений: 97
  • Репутация: 39
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: _Zip.au3 Подтверждение замены папки
« Ответ #8, Отправлен: Май 18, 2018, 11:57:13 »
Я скачал другую UDF, не могу найти вашу _Zip.au3
Можете скачать ее отсюда - https://www.autoitscript.com/forum/topic/73425-zipau3-udf-in-pure-autoit/ и в нее подставить ту строчку.
Или использовать вот такой код, без UDF:
Код: AutoIt [Выделить]
$hZipFile = @ScriptDir & "\1.zip"         ; Путь к архиву
$hFileName = "1.txt"                      ; Название файла
$hDestPath = @ScriptDir                   ; Куда копируем

$oApp = ObjCreate("Shell.Application")
$hFolderitem = $oApp.NameSpace($hZipFile).Parsename($hFilename)
$oApp.NameSpace($hDestPath).Copyhere($hFolderitem, 16)
 

Или можете подставить вот такую строку в вашу UDF, но не уверен что сработает
Код: AutoIt [Выделить]
$oApp.Namespace($hDestPath).CopyHere($oApp.Namespace($hZipFile).Items, 16)

« Последнее редактирование: Май 18, 2018, 12:06:22 от gunter123 »

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

Re: _Zip.au3 Подтверждение замены папки
« Ответ #8 Отправлен: Май 18, 2018, 11:57:13 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
4423 Просмотров
Последний ответ Ноябрь 03, 2009, 15:30:01
от Kaster
8 Ответов
6083 Просмотров
Последний ответ Декабрь 01, 2009, 17:03:46
от Suppir
8 Ответов
5229 Просмотров
Последний ответ Декабрь 01, 2009, 10:13:05
от Suppir
2 Ответов
3417 Просмотров
Последний ответ Сентябрь 19, 2011, 17:39:59
от agikon
4 Ответов
4182 Просмотров
Последний ответ Ноябрь 30, 2011, 19:10:33
от agikon
1 Ответов
2074 Просмотров
Последний ответ Январь 08, 2013, 21:13:35
от inververs
8 Ответов
3411 Просмотров
Последний ответ Январь 26, 2013, 17:05:21
от joiner
2 Ответов
2554 Просмотров
Последний ответ Август 17, 2013, 14:36:59
от Garrett
1 Ответов
3595 Просмотров
Последний ответ Февраль 21, 2014, 17:57:27
от Dimmak
1 Ответов
270 Просмотров
Последний ответ Ноябрь 13, 2017, 10:30:22
от Tyr