2013-03-15 4 views
2

Я пытаюсь написать агент LS для сканирования каталога в окнах, например: 'C: \' для любых файлов и подкаталогов. Для каждого подкаталога он заходит внутрь и ищет больше файлов и подкаталогов и продолжается до тех пор, пока их больше не искать. Я привык писать рекурсивный код для замены или удаления символов в длинной строке, но для этого я полностью потерян. Ниже мой код (это сочетание кода из домино файла справки и один я нашел на сайте IBM):Локальный каталог окон поиска для подкаталогов и файлов. Рекурсия?

Sub Initialize 
    Dim pathname As String, filename As String 
    pathname = "C:\*.*" 
    filename = Dir(pathname, 16) 
    Print "Begin scan" 
    Do While filename<>"" 
     If IsDir(pathname+filename)=True Then 
      Print pathname+filename+" is a directory" 
      'look for more directories and files in here 
     Else 
      Print filename+" is a file" 
     End If 
     filename=Dir() 
    Loop 
    Print "Finish scan" 
End Sub 

Function IsDir(Path As String) As Integer 
    Dim Void& 
    Dim Result As Boolean 
    On Error GoTo ErrorHandler 
    Void=FileLen(Path) 
    Result=False 
    GoTo Over 
ErrorHandler: 
    Result=True 
    Resume Over 
Over: 
    IsDir=Result 
End Function 

Что мне нужно изменить, чтобы сделать код рекурсивным в комментировал части? («Ищите больше каталогов и файлов здесь). Я не просто пытаюсь найти конкретный файл или каталог. Я хочу, чтобы все это имелось в наличии. Если я смогу это сделать, я смогу их восстановить и сохранить в NotesDocument.

ответ

6

Я использовал this solution пару раз, и она работает лакомство:

+1

Просто чтобы добавить к этому. Известна проблема, когда DIR $ может блокировать папки (если вы планируете удалить рекурсивно). SPR SODY85SM84. Подробнее здесь http://www-10.lotus.com/ldd/nd85forum.nsf/5f27803bba85d8e285256bf10054620d/322e819311441a5a8525772e005d0078?OpenDocument –

0

Прежде всего, вы не хотите вызвать Initialize рекурсивно. Вам нужна функция, в которую вы передаете путь.

Во-вторых, из-за состояния, с которым работает функция DIR, я думаю, вам нужно сделать это с помощью двух циклов. В первом цикле вы обрабатываете обычные файлы и, вы помещаете имена папок в список. Затем во втором цикле вы просматриваете список папок и вызываете рекурсивную функцию, проходящую по пути к каждому из них.

Смежные вопросы