Возникла задача (попросили), определить пуста ли папка, вот моя попытка, учитывая что на 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)