• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

  • Автор темы Автор темы Wanderstep
  • Дата начала Дата начала

Wanderstep

Lotus Team
23.03.2006
491
66
Есть код:
Код:
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
 
Для: Wanderer
Папки нужно создавать по-очереди. Т.е. нельзя сразу C:\1\2\3
Надо сначало C:\1, потом C:\1\2, потом C:\1\2\3
 
Path у меня неизменен.
Меняется только FolderName. Который имеет только один уровень вложенности.
По дебаггеру вижу, что проблема возникает, когда агент доходит до папки, которая уже была создана в предыдущий раз. Но в дебаггере у меня не отображается процесс прохождения внутри самой функции - вываливается сразу с ошибкой на той строчке, которую я описал.

Если я правильно понимаю, то в случае, если папка уже есть, функция моя должна была закрыться на строчке:
Exit Function
 
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. Впрочем, и этот вариант не прокатил.
 
Проблему нашел:
Строку:
Код:
FolderList$=Dir$(Path,ATTR_DIRECTORY)
заменил на:
Код:
FolderList$=Dir$(Path,16)
 
Для: Wanderer
Понятно. Именно поэтому надо ставить Option Declare.
И влепить галку, чтобы автоматически прописывалась.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы