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

Тема в разделе "Lotus - Программирование", создана пользователем Wanderer, 30 янв 2008.

  1. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    368
    Симпатии:
    14
    Есть код:
    Код (Text):
    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
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Wanderer
    Папки нужно создавать по-очереди. Т.е. нельзя сразу C:\1\2\3
    Надо сначало C:\1, потом C:\1\2, потом C:\1\2\3
     
  3. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    368
    Симпатии:
    14
    Path у меня неизменен.
    Меняется только FolderName. Который имеет только один уровень вложенности.
    По дебаггеру вижу, что проблема возникает, когда агент доходит до папки, которая уже была создана в предыдущий раз. Но в дебаггере у меня не отображается процесс прохождения внутри самой функции - вываливается сразу с ошибкой на той строчке, которую я описал.

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Какой path задаешь?
     
  5. Wanderer

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    368
    Симпатии:
    14
    Path формируется следующим образом:
    Format (doc.GetFirstItem("DeliveredDate").text, "yyyy-mm-dd")

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

    Wanderer Lotus team
    Lotus team

    Регистрация:
    23 мар 2006
    Сообщения:
    368
    Симпатии:
    14
    Проблему нашел:
    Строку:
    Код (Text):
    FolderList$=Dir$(Path,ATTR_DIRECTORY)
    заменил на:
    Код (Text):
    FolderList$=Dir$(Path,16)
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Wanderer
    Понятно. Именно поэтому надо ставить Option Declare.
    И влепить галку, чтобы автоматически прописывалась.
     
Загрузка...

Поделиться этой страницей