Возникла задача (попросили), определить пуста ли папка, вот моя попытка, учитывая что на AutoIt3 я уже делал такое именно перебором файлов в папке. Только выход не однозначный, либо цифрами либо смотреть как удобно в коде #True или #False и под это подстраивать -1, а может если папки нет то она явно пуста.
Спросил на офсайте, дали WinAPI-вариант
Debug PathIsDirectoryEmpty_(dir$)
мои примеры
Procedure IsEmptyFolder(Path$)
Protected i = 0
If ExamineDirectory(0, Path$, "*")
While NextDirectoryEntry(0)
i+1
If i > 2
i = 0
Break
EndIf
Wend
FinishDirectory(0)
Else
i = -1
EndIf
ProcedureReturn i
EndProcedure
Debug IsEmptyFolder(GetHomeDirectory() + "test1")Обновил:
1. Сделал, чтобы не перечислял все файлы, а только первый файл если есть, то это уже критерий "не пуста"
2. Убрал FileSize для проверки существования папки, достаточно что ExamineDirectory вернёт 0
3. Убрал проверку типа (файл или папка), это вообще было ошибкой
Ещё вариант. Здесь конкретно проверяется возврат "." и "..", так как для предыдущего примера есть сомнения что папка может созвратить "." и "..", то есть мы проверяем наличие 3-го элемента, но вдруг если есть файл, а одного из "." и ".." нет и папка будет интерпретировать как пустая. Чтобы этого не произошло, делает точный игнор этих папок и если хоть одной из них нет это не приведёт к ошибке, так как скрипт выдаст "папка пуста" только если есть что-то кроме них.
Procedure IsEmptyFolder(Path$)
Protected res$, i = 1
If ExamineDirectory(0, Path$, "*")
While NextDirectoryEntry(0)
res$ = DirectoryEntryName(0)
If res$ = ".." Or res$ = "."
res$ = ""
Continue
EndIf
If res$
i = 0
Break
EndIf
Wend
FinishDirectory(0)
Else
i = -1
EndIf
ProcedureReturn i
EndProcedure
Debug IsEmptyFolder(GetHomeDirectory() + "test1")Отредактировано AZJIO (19.01.2021 05:23:54)