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