Автор Тема: [Баг] DirCopy не копирует вложенные папки если исходный путь равен пути назначения  (Прочитано 757 раз)

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

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Пример:
Код: AutoIt [Выделить]
DirCopy(@ScriptDir, @ScriptDir & '\backup', 1)

тут копируются в папку backup только файлы, без папок.

Вот так я это обхожу на данный момент:

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

$aDirs = _FileListToArray(@ScriptDir, '*', 2, False)

DirCopy(@ScriptDir, @ScriptDir & '\backup', 1)

For $i = 1 To Ubound($aDirs) - 1
    DirCopy(@ScriptDir & '\' & $aDirs[$i], @ScriptDir & '\backup\' & $aDirs[$i], 1)
Next


Это баг или я что то путаю? :think:


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

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


Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
CreatoR  [?]
Цитировать
тут копируются в папку backup только файлы, без папок
Папки тоже копируются, но только если их имена "меньше" по списку. Например, для "backup" будут скопированы папки "123" и "asd", но не будут "qwe" и "Новая папка". Вероятно, процесс останавливается при копировании папки самой в себя (проводник, кстати, выводит сообщение при таком конфликте, но остальные папки копирует).

Цитировать
Вот так я это обхожу на данный момент
Назовите папку "яbackup" и она будет последней в списке ;)

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082

  • Автор темы
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI  [?]
Цитировать
Назовите папку "яbackup" и она будет последней в списке
А потом переименовать, ну да тоже вариант, но вопрос в том, баг ли это, или нет...

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


Оффлайн Cytrus [?]

  • Новичок
  • *
  • Сообщений: 85
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Это не баг.

Как вы скопируете папку саму в себя?
Она же элементарно в этот момент недоступна, потому как открыты её хэндлы.

Типа, FileFindFirstFile.

Да и вообще, была бы бесконечная рекурсия.
По аналогии, сам себе залезть в зад.  :o

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082

  • Автор темы
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Cytrus  [?]
Цитировать
Как вы скопируете папку саму в себя?
Не в саму себя, а подпапку Backup, впрочем я уже понял что это ограничение самой ОС, т.ч да, это не баг.

Цитировать
Она же элементарно в этот момент недоступна, потому как открыты её хэндлы
Дело не в этом, а скорее в...
Цитировать
была бы бесконечная рекурсия

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


Оффлайн xXx [?]

  • Осваивающий
  • **
  • Сообщений: 84
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
OffTopic
... А потом переименовать...
Не очень удобно, если такая папка уже есть. Вот еще возможный костыль:
Код: AutoIt [Выделить]
DirCopy(@ScriptDir, @ScriptDir & '\..\backup')
DirMove(@ScriptDir & '\..\backup', @ScriptDir & '\backup', 1)


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082

  • Автор темы
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
xXx  [?]
Цитировать
Вот еще возможный костыль
Ну я решил делать это "корректно":

Код: AutoIt [Выделить]
Func _DirBackup($sSrc, $sDest)
    Local $hFile = FileFindFirstFile($sSrc & '\*')
    Local $sFile
   
    While 1
        $sFile = FileFindNextFile($hFile)
       
        If @error Then
            ExitLoop
        EndIf
       
        If @extended Then
            DirCopy($sSrc & '\' & $sFile, $sDest & '\' & $sFile, 1)
        Else
            FileCopy($sSrc & '\' & $sFile, $sDest & '\' & $sFile, 9)
        EndIf
    WEnd
   
    FileClose($hFile)
EndFunc


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


 

Похожие темы

  Тема / Автор Ответов Последний ответ
7 Ответов
4464 Просмотров
Последний ответ Июнь 14, 2010, 14:21:59
от Yashied
6 Ответов
4276 Просмотров
Последний ответ Сентябрь 15, 2011, 15:10:06
от Zaramot
17 Ответов
4957 Просмотров
Последний ответ Сентябрь 29, 2011, 01:06:19
от agikon
3 Ответов
3101 Просмотров
Последний ответ Декабрь 24, 2011, 16:53:07
от Garrett
1 Ответов
2474 Просмотров
Последний ответ Март 02, 2013, 13:14:17
от madmasles
2 Ответов
1234 Просмотров
Последний ответ Июнь 26, 2015, 08:48:28
от madmasles
35 Ответов
24641 Просмотров
Последний ответ Июль 08, 2017, 16:46:59
от Andrey_A
2 Ответов
1058 Просмотров
Последний ответ Октябрь 28, 2015, 22:19:28
от Dr.Freezer
1 Ответов
790 Просмотров
Последний ответ Сентябрь 05, 2016, 18:54:12
от Garrett
1 Ответов
404 Просмотров
Последний ответ Ноябрь 21, 2017, 09:57:01
от Rouzenrot