Что нового

Опять _FileListToArrayRec не дает удалить папку

winkot

Новичок
Сообщения
169
Репутация
0
При использовании _FileListToArrayRec не всегда удается удалить основную папку. Вложенную папку удаляется, а основная - нет. Это проявляется не всегда и какой-либо закономерности не обнаружил. На форуме нашел, что этот вопрос уже поднимался . И в AutoIt внесли исправления. Но все равно иногда не работает. Но CreatoR предлагал внести
Код:
; Close current search
        [URL='https://autoit-script.ru/docs/keywords/if.htm']If[/URL] $iHide_HS Or $iHide_Link [URL='https://autoit-script.ru/docs/keywords/if.htm']Then[/URL]
            [URL='https://autoit-script.ru/docs/functions/dllcall.htm']DllCall[/URL]($hDLL, 'int', 'FindClose', 'ptr', $hSearch)
        [URL='https://autoit-script.ru/docs/keywords/else.htm']Else[/URL]
            [URL='https://autoit-script.ru/docs/functions/fileclose.htm']FileClose[/URL]($hSearch)
        [URL='https://autoit-script.ru/docs/keywords/if.htm']EndIf[/URL]


а внесли
Код:
; Close current search
        If $iHide_Link Then
            DllCall($hDLL, 'int', 'FindClose', 'ptr', $hSearch)
        Else
            FileClose($hSearch)
        EndIf


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

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Сделайте изменение в своем экземпляре библиотеки.
Либо используйте другую функцию поиска. На форуме есть примеры
 
Автор
W

winkot

Новичок
Сообщения
169
Репутация
0
По видимому _FileListToArrayRec не виноват. Попробовал с _FO_SearchEmptyFolders ситуация не изменилась. Значит ошибка в чем-то другом.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
у меня все работает
Код:
#include <File.au3>
Local $aFiles = _FileListToArrayRec('C:\Users\admin\Desktop\тест', '*', 2, 1, 0, 2)
For $i = $aFiles[0] To 1 Step -1
    DirRemove($aFiles[$i], 1)
Next
DirRemove('C:\Users\admin\Desktop\тест', 1)
 
Автор
W

winkot

Новичок
Сообщения
169
Репутация
0
Думаю дело в том, что когда я удалял файл (вручную), то окно с этой папкой было открыто и поэтому скрипт не мог ее удалить?
Я правильно думаю?
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Думаю дело в том, что когда я удалял файл (вручную), то окно с этой папкой было открыто и поэтому скрипт не мог ее удалить?
Я правильно думаю?
Если под открытым окном с папкой имеется в виду, что в проводнике Windows отображалась удаляемая папка, то это не должно быть препятствием, а вот если какой-нибудь файл в этой папке или в любой подпапке любой вложенности был открыт для чтения или записи каким-либо процессом, то это могло привести к ошибке при попытке удалить папку.
 
Автор
W

winkot

Новичок
Сообщения
169
Репутация
0
Да, в проводнике я открывал папку, вручную удалял файл. И потом эта папка (открытая в проводнике) не удалялась скриптом. Когда закрывал окно, то она удалялась.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Модули поиска файлов и папок не удаляют их, а лишь находят их. Некоторые программы при открытии файлов из неё не дают удалить папку пока не закроешь программу, несмотря на то что закрыл файл, закрыл папку, нет никакой связи, а когда закрыл программу, то удаляется.

Попробовал с _FO_SearchEmptyFolders ситуация не изменилась
Эта функция используется мной в программе "синхронизация папок" и никогда не видел проблем. Но я использовал версию 3.3.8.1. Создай пустые папки и попробуй удалить с помощью программы, у меня удаляется, сейчас ещё раз проверил. Если папку заблокировала какая либо программа, тут не стоить валить на функцию.
Перед использованием на новой версии сделай вывод в MsgBox, добавив кавычки по краям переменной, чтобы было видно что переменная не имеет пробелов и переносов строк на краях пути. Это тоже может быть причиной, так как путь не верный с пробелами.
Скачай последнюю версию, я недавно обновил по запросу.
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
код выше удаляет даже если открыта корневая или вложенная папка.
и да, если один из файлов открыт, то удаление папки невозможно
 
Верх