• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проверка на наличие и создание файловых папок

Wanderstep

Lotus Team
23.03.2006
493
65
BIT
18
Есть код:
Код:
Function IsDirID(FolderName As String, path As String) As Variant

IsDirID=False	
If FolderName<>"" Then
If Mid(path,Len(path))="/" Then
Mid$(path,Len(path))="\"
End If
FolderList$=Dir$(Path,ATTR_DIRECTORY)

While(FolderList$<>"")
If FolderList$=FolderName Then
IsDirID=True	
Exit Function
End If
FolderList$=Dir$()
Wend
If Not IsDirId Then
Mkdir path & FolderName & "\"
IsDirID=True
End If
End If

End Function
Функция должна была создавать папку в файловой системе, если она отсутствует, или ничего не делать, если такая папка уже есть.
Видимо, допущена ошибка, т.к. папки он создает, а вот проверку на наличие ведет некорректно:
в случае, если папка уже есть, скрипт почему-то доходит до строчки Mkdir path & FolderName & "\" и вываливает ошибку: "Path/file access error".

Где ошибка? Хелп :D
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Для: Wanderer
Папки нужно создавать по-очереди. Т.е. нельзя сразу C:\1\2\3
Надо сначало C:\1, потом C:\1\2, потом C:\1\2\3
 

Wanderstep

Lotus Team
23.03.2006
493
65
BIT
18
Path у меня неизменен.
Меняется только FolderName. Который имеет только один уровень вложенности.
По дебаггеру вижу, что проблема возникает, когда агент доходит до папки, которая уже была создана в предыдущий раз. Но в дебаггере у меня не отображается процесс прохождения внутри самой функции - вываливается сразу с ошибкой на той строчке, которую я описал.

Если я правильно понимаю, то в случае, если папка уже есть, функция моя должна была закрыться на строчке:
Exit Function
 

Wanderstep

Lotus Team
23.03.2006
493
65
BIT
18
Path формируется следующим образом:
Format (doc.GetFirstItem("DeliveredDate").text, "yyyy-mm-dd")

Если удалить все папки и запустить агент, то он создает папки.. но до тех пор, пока path вновь принимает значение, которое уже было.
Подозреваю, что этот кусок кода не отрабатывает так, как я планировал:
Код:
While(FolderList$<>"")
If FolderList$=FolderName Then
IsDirID=True	
Exit Function
End If
FolderList$=Dir$()
Wend
Либо надо сравнивать FolderList$ не просто с FolderName, а с Path+FolderName. Впрочем, и этот вариант не прокатил.
 

Wanderstep

Lotus Team
23.03.2006
493
65
BIT
18
Проблему нашел:
Строку:
Код:
FolderList$=Dir$(Path,ATTR_DIRECTORY)
заменил на:
Код:
FolderList$=Dir$(Path,16)
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Для: Wanderer
Понятно. Именно поэтому надо ставить Option Declare.
И влепить галку, чтобы автоматически прописывалась.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!