;Есть несколько методов обнаружения более старой папки:
;Способ 1 - авто-нумерация папок по порядку, как делает это Windows, если папка с таким именем уже существует.
;Проблема - если имеем папки 1, 2, 3, удалив папку 1, получим папки 2, 3, создав новую получим опять 1, 2, 3, теперь посути старые папка 2 и 3, но удалится первой папка 1, так как она первая по порядку.
;Способ 2 - определять папки по дате и времени ех последней модификации.
;Проблема - создав несколько папок подряд, они будут иметь одну и ту же дату и время. Для решения этой проблемы можно папки создавать с интервалом не менее одной секунды, но модифицировав старую папку, она будет считаться новее.
;Способ 3 - вести отдельный файл истории в который писать порядок создания папок и по нему определять какая папка старее.
;Проблема - требуеться создать и постоянно хранить файл истории создания папок.
#NoTrayIcon
;Способ 1
DirCreateNew_(@ScriptDir&'\test')
DirCreateNew_(@ScriptDir&'\test')
DirCreateNew_(@ScriptDir&'\test')
DirRemoveFirst_(@ScriptDir&'\test')
DirRemoveFirst_(@ScriptDir&'\test')
DirCreateNew_(@ScriptDir&'\test')
DirRemoveFirst_(@ScriptDir&'\test')
Exit
;Способ 2
Sleep(1100)
DirCreateNew_(@ScriptDir&'\test')
Sleep(1100)
DirCreateNew_(@ScriptDir&'\test')
Sleep(1100)
DirCreateNew_(@ScriptDir&'\test')
DirRemoveOld_(@ScriptDir)
DirRemoveOld_(@ScriptDir)
Sleep(1100)
DirCreateNew_(@ScriptDir&'\test')
DirRemoveOld_(@ScriptDir)
Exit
;Способ 3
Global $sLog = @ScriptDir&'\HistoryDirs.txt'
DirCreateNew_(@ScriptDir&'\test', $sLog)
DirCreateNew_(@ScriptDir&'\test', $sLog)
DirCreateNew_(@ScriptDir&'\test', $sLog)
DirRemoveLog_($sLog)
DirRemoveLog_($sLog)
DirCreateNew_(@ScriptDir&'\test', $sLog)
DirRemoveLog_($sLog)
UpdateLog_();Сохранить лог-историю в файл, который был указан в DirCreateNew_() и DirRemoveLog_()
Exit
;$_sDir = путь к папке для создания
;$_sLog = обновлять лог (путь к файлу) или нет (пустое значение)
Func DirCreateNew_($_sDir, $_sLog = '')
Local $_iPrefix = 1
While 1
$_sDir = StringRegExpReplace($_sDir, '\A(.*?)(\h\([0-9]+\))?(\.[^\h]+)?\z', '$1 (' & $_iPrefix & ')$3')
If Not FileExists($_sDir) Then ExitLoop
$_iPrefix += 1
WEnd
DirCreate($_sDir)
If @error Then Return SetError(@error, 0, $_sDir)
If $_sLog <> '' Then UpdateLog_($_sLog, $_sDir)
Return $_sDir
EndFunc
;найдет самую первую папку, указанную в $_sDir,подбирая порядковый номер и удалит ее.
Func DirRemoveFirst_($_sDir)
Local $_iPrefix = 1
While 1
$_sDir = StringRegExpReplace($_sDir, '\A(.*?)(\h\([0-9]+\))?(\.[^\h]+)?\z', '$1 (' & $_iPrefix & ')$3')
If FileExists($_sDir) Then ExitLoop
$_iPrefix += 1
WEnd
DirRemove($_sDir, 1)
Return $_sDir
EndFunc
;найдет в папке, указанной в $_sDir, самую старою папку по дате модификации и удалит ее.
Func DirRemoveOld_($_sDir)
Local $_iTmp, $_sResult, $_iTime = 99999999999999
Local $_sFile, $_hList = FileFindFirstFile($_sDir&'\*.*')
While 1
$_sFile = FileFindNextFile($_hList)
If @error Then
ExitLoop
EndIf
If @extended Then
$_iTmp = FileGetTime ($_sDir&'\'&$_sFile, 0, 1)
If $_iTmp < $_iTime Then
$_iTime = $_iTmp
$_sResult = $_sFile
EndIf
EndIf
WEnd
If $_sResult <> '' Then
DirRemove($_sDir &'\'& $_sResult, 1)
Return SetError(@error, 0, $_sResult)
EndIf
Return SetError(1)
EndFunc
;управляет логом
;$_sLog = имя файла истории который нужно открыть.
; если пустая строка то, сохранит данные уже открытого файла истории.
;$_sDir = имя папки которое нужно добавить в историю.
; если пустая строка то, удалит с диска папку, которая находится в верху списка истории.
Func UpdateLog_($_sLog = '', $_sDir = '')
Local Static $_sFile = '', $_sList = ''
If $_sLog <> $_sFile Then
If $_sFile <> '' Then
FileDelete($_sFile)
FileWrite($_sFile, $_sList)
$_sFile = ''
$_sList = ''
EndIf
If $_sLog <> '' Then
$_sList = FileRead($_sLog)
$_sFile = $_sLog
EndIf
EndIf
If $_sDir <> '' Then
$_sList &= $_sDir &@CRLF
Else
$_sList = StringRegExp($_sList, '(?imsx)\v*([^\v]*)(.*)', 3)
Local $_sTmp = $_sList[0]
$_sList = $_sList[1]
Return $_sTmp
EndIf
EndFunc
Func DirRemoveLog_($_sLog)
Local $_sDir = UpdateLog_($_sLog)
If $_sDir <> '' Then
DirRemove($_sDir, 1)
EndIf
EndFunc