1 (изменено: wildwolf007, 2014-02-16 22:36:10)

Тема: VBS: Обработка ошибок при работе рекурсии

Ранее в теме создал полноценно работающую рекурсию относительно определенного каталога. Но замел, что скрипт может "отвалиться" с ошибкой при появлении всевозможных ситуаций. Например:
1) Нет доступа к папке.
2) Есть проблемы при считывании имени файла (Спец символы которые могут встретится в наименовании вот нашел такое имя случайно )

Дыха?тельная систе?ма.txt

Может еще кто-то что-то может вспомнить.

Вопрос как можно обходить всевозможные такие проблемы?

В рекурсию включил дополнительно вывод в файл test.txt, что б обнаружить каталог или файл при котором произошла ошибка. Test1.txt - проверка данных в массиве. Вот сам код:

Dim startFolder, Files(), RazmerMassivaFiles,i,SpisokIzMassiva

set FSO = CreateObject("Scripting.FileSystemObject")

'Производим очистку если остались файлы прошлого запуска
If FSO.FileExists("D:\Test.txt") Then
FSO.DeleteFile "D:\Test.txt", 0
End If

If FSO.FileExists("D:\Test1.txt") Then
FSO.DeleteFile "D:\Test1.txt", 0
End If

'Set TextStream = FSO.CreateTextFile("D:\Test.txt")
set OFile = FSO.OpenTextFile("D:\Test.txt", 8, True)

RazmerMassivaFiles = 0
reDim Files(RazmerMassivaFiles)

Files(RazmerMassivaFiles) = "В данной структуре каталогов нет файлов"

Set fso = CreateObject("Scripting.FileSystemObject")
startFolder = "C:\Users\"

CheckFolderInFolder startFolder

MsgBox "Размер массива = " &RazmerMassivaFiles

'Вывод значений массива
'Set TextStream = FSO.CreateTextFile("D:\Test1.txt")
set OFile = FSO.OpenTextFile("D:\Test1.txt", 8, True)


For i=0 To RazmerMassivaFiles Step 1
    SpisokIzMassiva = SpisokIzMassiva + Files(i) +vbCrLf

    OFile.Write(Files(i) & vbCrLf)

Next
MsgBox "Готово файлы Test.txt и Test1.txt с данными находятся в директории D:\ "
MsgBox SpisokIzMassiva

Function CheckFolderInFolder (AdresFolder)
    'MsgBox AdresFolder
    Dim File
    Set Folder = FSO.GetFolder(AdresFolder)
    Set CollectionFolder = Folder.SubFolders
    Set CollectionFile = Folder.Files
    'MsgBox CollectionFile.count
    If CollectionFile.count > 0 Then
        For Each File In CollectionFile
            OFile.Write(AdresFolder & vbCrLf)        
            OFile.Write(File.Path & vbCrLf)
            Files(RazmerMassivaFiles) = File.Path
            'MsgBox "В массив Files("&RazmerMassivaFiles &") помещено значение = " &Files(RazmerMassivaFiles)
            RazmerMassivaFiles = RazmerMassivaFiles + 1
            reDim preserve Files(RazmerMassivaFiles)
            'Files(RazmerMassivaFiles) = "Пустое значение"
            
        Next
    End If
    
    For Each SubFolder In CollectionFolder
        CheckFolderInFolder SubFolder
    Next

End Function