WedX - журнал о программировании и компьютерных науках

Перезаписать файл при копировании в zip-файл с помощью библиотеки Microsoft Shell COM.

Я использую COM-библиотеку Microsoft Shell Controls And Automation из VBA. У меня есть zip-файл, и я копирую файл в zip-файл. Проблема в том, что файл уже существует, и он выдает диалоговое окно, в котором говорится: «В этом месте уже есть файл с таким именем, вы хотите: а) скопировать и заменить или б) не копировать». Я хотел бы программно сказать «Копировать и заменить» (перезаписать!).

Я думаю, что эквивалент на платформе .NET имеет страницу документации по адресу https://msdn.microsoft.com/en-us/library/windows/desktop/ms723207%28v=vs.85%29.aspx., но я пробовал разные .

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

Я использую Windows 8, 64-битную версию. Я работаю в Excel (14) VBA (7), и библиотека, которую я использую, находится в C:\Windows\SysWOW64\shell32.dll.

Вот глава IDL библиотеки типов, о которой я говорю

   // Generated .IDL file (by the OLE/COM Object Viewer)
   // 
   // typelib filename: shell32.dll

   [
      uuid(50A7E9B0-70EF-11D1-B75A-00A0C90564FE),
      version(1.0),
      helpstring("Microsoft Shell Controls And Automation")
   ]
   library Shell32
   {
       // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
03.06.2014

  • да, вы можете удалить файл, если у вас есть на это права. Вы знаете, что в VBA вы можете отключить всплывающие окна, что в большинстве (во всех?) случаях делает для вас «да» под капотом 03.06.2014
  • каков метод удаления, потому что я сделал дамп всего IDL в библиотеке типов и ничего не могу найти. Я не думаю, что разрешения / права являются проблемой. Кроме того, всплывающее окно вызывается dll оболочки, а не Excel, оно выглядит точно так же, как диалоговое окно проводника Windows, а вовсе не как диалоговое окно Excel, поэтому Application.DisplayAlerts = False, к сожалению, не поможет. 03.06.2014
  • Подтверждено, что Application.DisplayAlerts = False не исправляет. Спасибо за ваше предложение. 03.06.2014
  • Это поможет показать ваш существующий код VBA. 03.06.2014

Ответы:


1

Мой предпочтительный ответ — использовать метод MoveHere, чтобы переместить старый перед добавлением. Таким образом, диалоговое окно не выдается. Спасибо всем.

03.06.2014

2

Вот как вы можете удалить файл из zip-архива с помощью Shell:

Sub DeleteFromZip()

    Dim fldr, zpath, itm, vrbs, vrb

    zpath = "C:\_stuff\test\test.zip"

    Set fldr = CreateObject("Shell.Application").Namespace(zpath)

    For Each itm In fldr.items
        If itm.Name = "IMG_0000322_2014.03.11.jpg" Then
            itm.invokeverb "Delete"
            Exit For
        End If
    Next itm

End Sub

Однако это вызывает диалоговое окно подтверждения — см. эту ссылку, чтобы избежать этого:

FolderItem.InvokeVerb(Удалить) без подтверждения

03.06.2014
  • Да, я добрался до ответа, который в ссылке. Я просто использовал метод MoveHere, чтобы переместить старый элемент перед добавлением новой версии. Спасибо. 03.06.2014
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]